Almacenamiento de datos (SQLite)
Para hacer uso de sqlite necesitamos de de unas clases para poder realizar las acciones necesarias. Entonces comenzaremos por ver cual es el que usaremos primero, claro está que al crear el proyecto ya tendremos la clase MainActivity.java y el activity_main.xml una vez aclarado esto, comenzamos.
Esta estructura está basado en la documentacion oficial de android developes.
Bien comenzamos con la definicion de nuestra clase que contendrá el nombre de nuestra tabla o tablas y sus respectivas columnas, todos estos serán nuestras constantes a la cual se le menciona en la documentación como
Contrato
, para este ejercicio se va a crear una tabla Empleado con las siguientes columnas.
- id
- nombre
- apellidos
- direccion
- telefono
- edad
- antigüedad
- salario
ReaderContract.java
1 │ package com.example.exam;
2 │
3 │
4 │ import android.provider.BaseColumns;
5 │
6 │ public final class ReaderContract {
7 │
8 │ public static class ContractEntries implements BaseColumns {
9 │ public static final String TABLE_EMPLEADO = "empleado";
10 │
11 │ public static final String COLUMN_NUMERO_EMPLEADO = "id";
12 │ public static final String COLUMN_NOMBRE_EMPLEADO = "nombre";
13 │ public static final String COLUMN_APELLIDOS_EMPLEADO="apellidos";
14 │ public static final String COLUMN_DIRECCION_EMPLEADO="direccion";
15 │ public static final String COLUMN_TELEFONO_EMPLEADO ="telefono";
16 │ public static final String COLUMN_EDAD_EMPLEADO ="edad";
17 │ public static final String COLUMN_ANTIGUEDAD_EMPLEADO ="antiguedad";
18 │ public static final String COLUMN_SALARIO_EMPLEADO ="salario";
19 │
20 │ }
21 │ }
Estas constante nos servirán para no olvidarnos de los nombres de los campos que estaremos utilizand e incluso nos evitarán errores al momento de crear la tabla, insertar, consultar, editar o eliminar los datos porque los tendremos bien referenciados.
Despues de eso vamos a crear una clase que herede de SQLiteOpenHelper, este nos ayudará a crear nuestra base de datos local así como las tablas y sus respectivas columnas.
public class EmpleadoHelper extends SQLiteOpenHelper
Nota: En EmpleadoHelper.java es donde comenzamos a usar nuestros constantes, entonces para no tener problemas es mejor importar la clase de la siguiente manera:
import com.example.exam.ReaderContract.ContractEntries;
Despues de importar la clase, ya es posible hacer uso de nuestras constantes sin problemas.
Para hacer la sentencia
SQL_CREATE_ENTRIES
, para no equivocarme primero cree la sentencia completa sin usar las constantes, quedando la sentencia inicialmente como:
"CREATE TABLE empleado (id INTEGER PRIMARY KEY, apellidos TEXT, nombre TEXT, direccion TEXT, telefono TEXT, edad INTEGER, antiguedad DOUBLE, salario DOUBLE)"
Para despues ir reemplazando los campos con las constantes de la clase
ContractEntries
EmpleadoHelper.java
package com.example.exam;
2 │
3 │ import android.content.Context;
4 │ import android.database.sqlite.SQLiteDatabase;
5 │ import android.database.sqlite.SQLiteOpenHelper;
6 │ import com.example.exam.ReaderContract.ContractEntries;
7 │
8 │ public class EmpleadoHelper extends SQLiteOpenHelper {
9 │
10 │ public static final int DATABASE_VERSION = 1; //Definimos la vesión de la Base de datos
11 │ public static final String DATABASE_NAME = "patito.db"; //Definimos el nombre de la base de datos
12 │
13 │ private static final String SQL_CREATE_ENTRIES = "CREATE TABLE "+ ContractEntries.TABLE_EMPLEADO +" ("
14 │ +ContractEntries.COLUMN_NUMERO_EMPLEADO+" INTEGER PRIMARY KEY , "
15 │ +ContractEntries.COLUMN_APELLIDOS_EMPLEADO+" TEXT, "
16 │ +ContractEntries.COLUMN_NOMBRE_EMPLEADO+" TEXT, "
17 │ +ContractEntries.COLUMN_DIRECCION_EMPLEADO+" TEXT, "
18 │ +ContractEntries.COLUMN_TELEFONO_EMPLEADO+" TEXT,"
19 │ +ContractEntries.COLUMN_EDAD_EMPLEADO+" INTEGER, "
20 │ +ContractEntries.COLUMN_ANTIGUEDAD_EMPLEADO+" DOUBLE, "
21 │ +ContractEntries.COLUMN_SALARIO_EMPLEADO+" DOUBLE)";
22 │
23 │ private static final String SQL_DELETE_ENTRIES =
24 │ "DROP TABLE IF EXISTS " + ContractEntries.TABLE_EMPLEADO;
25 │ public EmpleadoHelper (Context context){ //Pedimos el contexto
26 │ super(context,DATABASE_NAME,null,DATABASE_VERSION); //Le pasamos a la super clase el contexto, Nombre de la BD, el factory va en null y por último la version de la BD
27 │ }
28 │
29 │ @Override
30 │ public void onCreate(SQLiteDatabase db) {
31 │ db.execSQL(SQL_CREATE_ENTRIES); //Aquì creamos la tabla
32 │ }
33 │
34 │ @Override
35 │ public void onUpgrade(SQLiteDatabase db, int i, int i1) {
36 │ db.execSQL(SQL_DELETE_ENTRIES); // Borramos la tabla si existe
37 │ onCreate(db); // y llamamos a onCreate para subir de versión
38 │ }
39 │ }
También creé una clase Empleado para poder crear objetos y manipular mejor la información ahorramdome el
split
para las cadenas, agragandole su constructor y encapsulando sus atributos.
Empleado.java
1 │ package com.example.exam;
2 │
3 │ public class Empleado {
4 │ private int id;
5 │ private String apellidos;
6 │ private String nombre;
7 │ private String direccion;
8 │ private String telefono;
9 │ private int edad;
10 │ private double antiguedad;
11 │ private double salario;
12 │
13 │ public Empleado(int id, String apellidos, String nombre, String direccion, String telefono, int edad, double antigued
│ ad, double salario) {
14 │ this.id = id;
15 │ this.apellidos = apellidos;
16 │ this.nombre = nombre;
17 │ this.direccion = direccion;
18 │ this.telefono = telefono;
19 │ this.edad = edad;
20 │ this.antiguedad = antiguedad;
21 │ this.salario = salario;
22 │ }
23 │
24 │ public int getId() {return id;}
25 │ public void setId(int id) {this.id = id;}
26 │ public String getApellidos() {return apellidos;}
27 │ public void setApellidos(String apellidos) {this.apellidos = apellidos;}
28 │ public String getNombre() {return nombre;}
29 │ public void setNombre(String nombre) {this.nombre = nombre;}
30 │ public String getDireccion() {return direccion;
31 │ public void setDireccion(String direccion) {this.direccion = direccion;}
32 │ public String getTelefono() {return telefono;}
33 │ public void setTelefono(String telefono) {this.telefono = telefono;}
34 │ public int getEdad() {return edad;}
35 │ public void setEdad(int edad) {this.edad = edad;}
36 │ public double getAntiguedad() {return antiguedad;}
37 │ public void setAntiguedad(double antiguedad) {this.antiguedad = antiguedad;}
38 │ public double getSalario() {return salario;}
39 │ public void setSalario(double salario) {this.salario = salario;}
40 │ }
Una vez teniendo estos elémentos, es hora de hacer cosillas en el MainActivity.java
En elMainActivity
vamos a instanciar elEmpleadoHelper
, declarandolo primero
EmpleadoHelper helper;
y en el constructor instanciarlo.
helper = new EmpleadoHelper(this); //recuerdemos que solo le pasamos el contexto
Botón Agregar
btnAgregar.setOnClickListener(view -> {
String name,last_name,direction,phone;
int id,age;
double labor_old,salary;
id =Integer.parseInt(txtId.getText().toString());
name =txtName.getText().toString();
last_name = txtLastName.getText().toString();
direction =txtDirection.getText().toString();
phone = txtPhone.getText().toString();
age = Integer.parseInt(txtAge.getText().toString());
labor_old = Double.parseDouble(txtLabor_Old.getText().toString());
salary = Double.parseDouble(txtSalary.getText().toString());
SQLiteDatabase db = helper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(ContractEntries.COLUMN_NUMERO_EMPLEADO,id);
values.put(ContractEntries.COLUMN_APELLIDOS_EMPLEADO,last_name);
values.put(ContractEntries.COLUMN_NOMBRE_EMPLEADO,name);
values.put(ContractEntries.COLUMN_DIRECCION_EMPLEADO,direction);
values.put(ContractEntries.COLUMN_TELEFONO_EMPLEADO,phone);
values.put(ContractEntries.COLUMN_EDAD_EMPLEADO,age);
values.put(ContractEntries.COLUMN_ANTIGUEDAD_EMPLEADO,labor_old);
values.put(ContractEntries.COLUMN_SALARIO_EMPLEADO,salary);
long newRowId = db.insert(ContractEntries.TABLE_EMPLEADO, null, values);
Toast.makeText(MainActivity.this, "-> "+ newRowId, Toast.LENGTH_SHORT).show();
});
Botón Consultar
btnConsultar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(MainActivity.this, Listado.class);
startActivity(intent);
}
});
Asì se veria completamente en la clase
MainActivity
MainActivity.java
1 │ package com.example.exam;
2 │
3 │ import androidx.appcompat.app.AppCompatActivity;
4 │
5 │ import android.annotation.SuppressLint;
6 │ import android.content.ContentValues;
7 │ import android.content.Intent;
8 │ import android.database.Cursor;
9 │ import android.database.sqlite.SQLiteDatabase;
10 │ import android.os.Bundle;
11 │ import android.view.View;
12 │ import android.widget.ArrayAdapter;
13 │ import android.widget.Button;
14 │ import android.widget.EditText;
15 │ import android.widget.Toast;
16 │
17 │ import com.example.exam.ReaderContract.ContractEntries;
18 │
19 │ import java.util.ArrayList;
20 │
21 │ public class MainActivity extends AppCompatActivity {
22 │ private Button btnAgregar,btnConsultar;
23 │ private EditText txtId,txtName,txtLastName,txtDirection,txtPhone,txtAge,txtLabor_Old,txtSalary;
24 │
25 │
26 │ EmpleadoHelper helper;
27 │ @Override
28 │ protected void onCreate(Bundle savedInstanceState) {
29 │ super.onCreate(savedInstanceState);
30 │ setContentView(R.layout.activity_main);
31 │
32 │
33 │ btnAgregar = findViewById(R.id.btnAgregar);
34 │ btnConsultar = findViewById(R.id.btnConsultar);
35 │
36 │ txtId = findViewById(R.id.txtId);
37 │ txtName = findViewById(R.id.txtNombre);
38 │ txtLastName = findViewById(R.id.txtApellidos);
39 │ txtDirection = findViewById(R.id.txtDireccion);
40 │ txtPhone = findViewById(R.id.txtTelefono);
41 │ txtAge = findViewById(R.id.txtEdad);
42 │ txtLabor_Old = findViewById(R.id.txtAntiguedad);
43 │ txtSalary = findViewById(R.id.txtSalario);
44 │
45 │ helper = new EmpleadoHelper(this);
46 │
47 │ btnAgregar.setOnClickListener(view -> {
48 │ String name,last_name,direction,phone;
49 │ int id,age;
50 │ double labor_old,salary;
51 │
52 │ id =Integer.parseInt(txtId.getText().toString());
53 │ name =txtName.getText().toString();
54 │ last_name = txtLastName.getText().toString();
55 │ direction =txtDirection.getText().toString();
56 │ phone = txtPhone.getText().toString();
57 │ age = Integer.parseInt(txtAge.getText().toString());
58 │ labor_old = Double.parseDouble(txtLabor_Old.getText().toString());
59 │ salary = Double.parseDouble(txtSalary.getText().toString());
60 │
61 │ SQLiteDatabase db = helper.getWritableDatabase();
62 │ ContentValues values = new ContentValues();
63 │
64 │ values.put(ContractEntries.COLUMN_NUMERO_EMPLEADO,id);
65 │ values.put(ContractEntries.COLUMN_APELLIDOS_EMPLEADO,last_name);
66 │ values.put(ContractEntries.COLUMN_NOMBRE_EMPLEADO,name);
67 │ values.put(ContractEntries.COLUMN_DIRECCION_EMPLEADO,direction);
68 │ values.put(ContractEntries.COLUMN_TELEFONO_EMPLEADO,phone);
69 │ values.put(ContractEntries.COLUMN_EDAD_EMPLEADO,age);
70 │ values.put(ContractEntries.COLUMN_ANTIGUEDAD_EMPLEADO,labor_old);
71 │ values.put(ContractEntries.COLUMN_SALARIO_EMPLEADO,salary);
72 │
73 │ long newRowId = db.insert(ContractEntries.TABLE_EMPLEADO, null, values);
74 │ Toast.makeText(MainActivity.this, "-> "+ newRowId, Toast.LENGTH_SHORT).show();
75 │
76 │ });
77 │ btnConsultar.setOnClickListener(new View.OnClickListener() {
78 │ @Override
79 │ public void onClick(View view) {
80 │ Intent intent = new Intent(MainActivity.this, Listado.class);
81 │ startActivity(intent);
82 │ }
83 │ });
84 │ }
85 │
86 │
87 │ }
Listado
En esta clase, se define el evento clic de los
items
de la lista, para que cada que seleccionemos un elemento, nos redirija otro activity en donde podamosEliminar
yEditar
.
Evento click
lstListado.setOnItemClickListener((adapterView, view, position, id) -> {
String name, last_name, direction, phone;
int id_em, age;
double labor_old, salary;
name = listaEmpleado.get(position).getNombre();
last_name = listaEmpleado.get(position).getApellidos();
direction = listaEmpleado.get(position).getDireccion();
phone = listaEmpleado.get(position).getTelefono();
id_em = listaEmpleado.get(position).getId();
age = listaEmpleado.get(position).getEdad();
labor_old = listaEmpleado.get(position).getAntiguedad();
salary = listaEmpleado.get(position).getSalario();
Intent intent = new Intent(Listado.this, Edit_Delete.class);
intent.putExtra("id", id_em);
intent.putExtra("name", name);
intent.putExtra("last_name", last_name);
intent.putExtra("direction", direction);
intent.putExtra("phone", phone);
intent.putExtra("age", age);
intent.putExtra("labor_old", labor_old);
intent.putExtra("salary", salary);
startActivity(intent);
});
Listado.java
Clase en donde listamos todos los datos, para poder visulizarlos y al darle clic poder obtener los datos, poder editarlos o eliminarlos.
1 │ package com.example.exam;
2 │
3 │ import androidx.appcompat.app.AppCompatActivity;
4 │
5 │ import android.annotation.SuppressLint;
6 │ import android.content.Intent;
7 │ import android.database.Cursor;
8 │ import android.database.sqlite.SQLiteDatabase;
9 │ import android.os.Bundle;
10 │ import android.view.View;
11 │ import android.widget.AdapterView;
12 │ import android.widget.ArrayAdapter;
13 │ import android.widget.Button;
14 │ import android.widget.ListView;
15 │ import android.widget.Toast;
16 │
17 │ import com.example.exam.ReaderContract.ContractEntries;
18 │
19 │ import java.util.ArrayList;
20 │
21 │ public class Listado extends AppCompatActivity {
22 │
23 │ private ListView lstListado;
24 │
25 │ ArrayList<String> listado; //Inicializo un ArrayList de tipo String
26 │ ArrayList<Empleado> listaEmpleado; //Inicializo un ArrayList de tipo empleado
27 │ EmpleadoHelper helper; //Inicializo otra vez un helper de tipo EmpleadoHelper
28 │ ArrayAdapter adapter; //Un adaptador de tipo ArrayAdapter para pasarlo a un listview
29 │
30 │ private Button btnOrden,btnNomina,btnSueldo,btnPromedio;
31 │ @Override
32 │ protected void onCreate(Bundle savedInstanceState) {
33 │ super.onCreate(savedInstanceState);
34 │ setContentView(R.layout.activity_listado);
35 │
36 │ btnOrden = findViewById(R.id.btnOrden);
37 │ btnNomina = findViewById(R.id.btnNomina);
38 │ btnSueldo = findViewById(R.id.btnSueldo);
39 │ btnPromedio = findViewById(R.id.btnPromedio);
40 │ lstListado = findViewById(R.id.lstListado);
41 │ helper = new EmpleadoHelper(this); // Instancia del helper
42 │
43 │ lstListado = findViewById(R.id.lstListado);
44 │ lstListado.setOnItemClickListener((adapterView, view, position, id) -> {
45 │ String name, last_name, direction, phone;
46 │ int id_em, age;
47 │ double labor_old, salary;
48 │ name = listaEmpleado.get(position).getNombre();
49 │ last_name = listaEmpleado.get(position).getApellidos();
50 │ direction = listaEmpleado.get(position).getDireccion();
51 │ phone = listaEmpleado.get(position).getTelefono();
52 │ id_em = listaEmpleado.get(position).getId();
53 │ age = listaEmpleado.get(position).getEdad();
54 │ labor_old = listaEmpleado.get(position).getAntiguedad();
55 │ salary = listaEmpleado.get(position).getSalario();
56 │
57 │ Intent intent = new Intent(Listado.this, Edit_Delete.class);
58 │ intent.putExtra("id", id_em);
59 │ intent.putExtra("name", name);
60 │ intent.putExtra("last_name", last_name);
61 │ intent.putExtra("direction", direction);
62 │ intent.putExtra("phone", phone);
63 │ intent.putExtra("age", age);
64 │ intent.putExtra("labor_old", labor_old);
65 │ intent.putExtra("salary", salary);
66 │ startActivity(intent);
67 │ });
68 │ actualizar();
69 │ }
70 │
71 │ @SuppressLint("Range")
72 │ private ArrayList<String> lista() {
73 │ ArrayList<String> datos; //declaro un arrayList de tipo de String
74 │
75 │ SQLiteDatabase db = helper.getReadableDatabase(); // Se inicializa la conexion a la bd con el helper de tipo lectura
76 │ Cursor cursor = db.query( //Con el cursor hacemos una query
77 │ ContractEntries.TABLE_EMPLEADO, //Pasamo el nombre de la tabla
78 │ null, //pasamos null para traer todas las columnas
79 │ null, //null para la opcion del where
80 │ null, // null para los argumentos del where
81 │ null, //Sin agrupamiento
82 │ null, //Sin filtrado
83 │ null //son ordenamiento
84 │ );
85 │ datos = new ArrayList<>();
86 │ while (cursor.moveToNext()) {
87 │ String dato = "";
88 │ String name, last_name, direction, phone;
89 │ int id, age;
90 │ double labor_old, salary;
91 │
92 │ id = cursor.getInt(cursor.getColumnIndex(ContractEntries.COLUMN_NUMERO_EMPLEADO));
93 │ name = cursor.getString(cursor.getColumnIndex(ContractEntries.COLUMN_NOMBRE_EMPLEADO));
94 │ last_name = cursor.getString(cursor.getColumnIndex(ContractEntries.COLUMN_APELLIDOS_EMPLEADO));
95 │ direction = cursor.getString(cursor.getColumnIndex(ContractEntries.COLUMN_DIRECCION_EMPLEADO));
96 │ phone = cursor.getString(cursor.getColumnIndex(ContractEntries.COLUMN_TELEFONO_EMPLEADO));
97 │ age = cursor.getInt(cursor.getColumnIndex(ContractEntries.COLUMN_EDAD_EMPLEADO));
98 │ labor_old = cursor.getDouble(cursor.getColumnIndex(ContractEntries.COLUMN_ANTIGUEDAD_EMPLEADO));
99 │ salary = cursor.getDouble(cursor.getColumnIndex(ContractEntries.COLUMN_SALARIO_EMPLEADO));
100 │
101 │ dato = "ID: " + id + " Nombre: " + name + " Apellido: " +
102 │ last_name + " Direccion: " + direction + " Telefono: "
103 │ + phone + " Edad: " + age + " Antiguedad: " + labor_old + " Salario: " + salary;
104 │ listaEmpleado.add(new Empleado(id, last_name, name, direction, phone, age, labor_old, salary));
105 │ datos.add(dato);
106 │ }
107 │ cursor.close();
108 │ return datos;
109 │ }
110 │
111 │ private void actualizar() {
112 │ listado = new ArrayList<>();
113 │ listaEmpleado = new ArrayList<>();
114 │ listado = lista();
115 │ adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, listado);
116 │ lstListado.setAdapter(adapter);
117 │
118 │ btnOrden.setOnClickListener(v -> {
119 │ listado = new ArrayList<>();
120 │ listaEmpleado = new ArrayList<>();
121 │ listado = ordenar();
122 │ adapter = new ArrayAdapter(getApplicationContext(), android.R.layout.simple_list_item_1, listado);
123 │ lstListado.setAdapter(adapter);
124 │ });
125 │
126 │ btnPromedio.setOnClickListener(v -> promedio());
127 │ btnSueldo.setOnClickListener(v -> salarioMayor());
128 │ btnNomina.setOnClickListener(v -> nomina());
129 │ }
130 │ private void promedio()
131 │ {
132 │ ArrayList<String> datos;
133 │
134 │ String [] columnsGet = {"AVG("+ContractEntries.COLUMN_EDAD_EMPLEADO+" )", ContractEntries.COLUMN_NOMBRE_EMPLEADO}
│ ;
135 │ SQLiteDatabase db = helper.getReadableDatabase();
136 │ Cursor cursor = db.query(
137 │ ContractEntries.TABLE_EMPLEADO,
138 │ columnsGet,
139 │ null,
140 │ null,
141 │ null,
142 │ null,
143 │ null
144 │ );
145 │ datos = new ArrayList<>();
146 │ while (cursor.moveToNext()) {
147 │ int age = cursor.getInt(0);
148 │ datos.add(String.valueOf(age));
149 │ }
150 │ cursor.close();
151 │ Toast.makeText(this, "Promedio -->" + datos.get(0).toString(), Toast.LENGTH_LONG).show();
152 │
153 │ }
154 │ private ArrayList<String> ordenar()
155 │ {
156 │ ArrayList<String> datos;
157 │
158 │ String [] columnsGet = {ContractEntries.COLUMN_NOMBRE_EMPLEADO};
159 │ String order = ContractEntries.COLUMN_NOMBRE_EMPLEADO + " ASC";
160 │ SQLiteDatabase db = helper.getReadableDatabase();
161 │ Cursor cursor = db.query(
162 │ ContractEntries.TABLE_EMPLEADO,
163 │ columnsGet,
164 │ null,
165 │ null,
166 │ null,
167 │ null,
168 │ order
169 │ );
170 │
171 │ datos = new ArrayList<>();
172 │ while (cursor.moveToNext()) {
173 │
174 │ String name = cursor.getString(0);
175 │ datos.add(name);
176 │ }
177 │ cursor.close();
178 │
179 │ return datos;
180 │ }
181 │ private void salarioMayor()
182 │ {
183 │ ArrayList<String> datos;
184 │
185 │ String [] columnsGet = {"MAX("+ContractEntries.COLUMN_SALARIO_EMPLEADO+" )", ContractEntries.COLUMN_NOMBRE_EMPLEA
│ DO};
186 │ SQLiteDatabase db = helper.getReadableDatabase();
187 │ Cursor cursor = db.query(
188 │ ContractEntries.TABLE_EMPLEADO,
189 │ columnsGet,
190 │ null,
191 │ null,
192 │ null,
193 │ null,
194 │ null
195 │ );
196 │ datos = new ArrayList<>();
197 │ while (cursor.moveToNext()) {
198 │ int age = cursor.getInt(0);
199 │ String n = cursor.getString(1);
200 │ datos.add(age + " : "+ n);
201 │ }
202 │ cursor.close();
203 │ Toast.makeText(this, "-->" + datos.get(0).toString(), Toast.LENGTH_LONG).show();
204 │
205 │ }
206 │ private void nomina()
207 │ {
208 │ ArrayList<String> datos;
209 │
210 │ String [] columnsGet = {"SUM("+ContractEntries.COLUMN_SALARIO_EMPLEADO+" )"};
211 │ SQLiteDatabase db = helper.getReadableDatabase();
212 │ Cursor cursor = db.query(
213 │ ContractEntries.TABLE_EMPLEADO,
214 │ columnsGet,
215 │ null,
216 │ null,
217 │ null,
218 │ null,
219 │ null
220 │ );
221 │ datos = new ArrayList<>();
222 │ while (cursor.moveToNext()) {
223 │ int cal = cursor.getInt(0);
224 │
225 │ datos.add(String.valueOf(cal));
226 │ }
227 │ cursor.close();
228 │ Toast.makeText(this, "Nomina -->" + datos.get(0), Toast.LENGTH_LONG).show();
229 │ }
230 │ }
listado.xml
Este seria la definición de la vista de nuestro activity en donde veriamos el listado, es una sencilla en donde incluimos algunos botones para poder hacer un ordenado y operaciones como el promedio de las edades, saber el sueldo mas alto.
1 │ <?xml version="1.0" encoding="utf-8"?>
2 │ <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
3 │ xmlns:app="http://schemas.android.com/apk/res-auto"
4 │ xmlns:tools="http://schemas.android.com/tools"
5 │ android:layout_width="match_parent"
6 │ android:layout_height="match_parent"
7 │ tools:context=".Listado">
8 │
9 │ <ListView
10 │ android:id="@+id/lstListado"
11 │ android:layout_width="0dp"
12 │ android:layout_height="0dp"
13 │ android:layout_marginStart="8dp"
14 │ android:layout_marginTop="8dp"
15 │ android:layout_marginEnd="8dp"
16 │ android:layout_marginBottom="150dp"
17 │ app:layout_constraintBottom_toBottomOf="parent"
18 │ app:layout_constraintEnd_toEndOf="parent"
19 │ app:layout_constraintStart_toStartOf="parent"
20 │ app:layout_constraintTop_toTopOf="parent" />
21 │
22 │ <Button
23 │ android:id="@+id/btnOrden"
24 │ android:layout_width="wrap_content"
25 │ android:layout_height="wrap_content"
26 │ android:layout_marginTop="8dp"
27 │ android:layout_marginBottom="8dp"
28 │ android:text="A-Z"
29 │ app:layout_constraintBottom_toBottomOf="@+id/btnConsultar"
30 │ app:layout_constraintEnd_toEndOf="@+id/btnSueldo"
31 │ app:layout_constraintTop_toBottomOf="@+id/btnSueldo" />
32 │
33 │ <Button
34 │ android:id="@+id/btnNomina"
35 │ android:layout_width="wrap_content"
36 │ android:layout_height="wrap_content"
37 │ android:layout_marginStart="16dp"
38 │ android:layout_marginTop="8dp"
39 │ android:layout_marginBottom="16dp"
40 │ android:text="Nomina"
41 │ app:layout_constraintBottom_toBottomOf="parent"
42 │ app:layout_constraintStart_toStartOf="parent"
43 │ app:layout_constraintTop_toBottomOf="@+id/lstListado" />
44 │
45 │ <Button
46 │ android:id="@+id/btnSueldo"
47 │ android:layout_width="wrap_content"
48 │ android:layout_height="wrap_content"
49 │ android:layout_marginStart="8dp"
50 │ android:layout_marginEnd="8dp"
51 │ android:text="> Sueldo "
52 │ app:layout_constraintBottom_toBottomOf="@+id/btnNomina"
53 │ app:layout_constraintEnd_toStartOf="@+id/btnPromedio"
54 │ app:layout_constraintStart_toEndOf="@+id/btnNomina" />
55 │
56 │ <Button
57 │ android:id="@+id/btnPromedio"
58 │ android:layout_width="wrap_content"
59 │ android:layout_height="wrap_content"
60 │ android:layout_marginEnd="8dp"
61 │ android:text="PROMEDIO"
62 │ app:layout_constraintBottom_toBottomOf="@+id/btnSueldo"
63 │ app:layout_constraintEnd_toEndOf="parent" />
64 │ </androidx.constraintlayout.widget.ConstraintLayout>
Edit_Delet
Este es la seccion de la edicion y eliminacion de datos y consultas un poco personalizados
Edit_delete.java
1 │ package com.example.exam;
2 │
3 │ import androidx.appcompat.app.AppCompatActivity;
4 │
5 │ import android.annotation.SuppressLint;
6 │ import android.content.ContentValues;
7 │ import android.database.Cursor;
8 │ import android.database.sqlite.SQLiteDatabase;
9 │ import android.os.Bundle;
10 │ import android.view.View;
11 │ import android.widget.Button;
12 │ import android.widget.EditText;
13 │ import android.widget.Toast;
14 │ import com.example.exam.ReaderContract.ContractEntries;
15 │
16 │ import java.util.ArrayList;
17 │
18 │ public class Edit_Delete extends AppCompatActivity {
19 │ EmpleadoHelper helper;
20 │ ArrayList<Empleado> listaEmpleado;
21 │
22 │ private Button btnEditar,btnEliminar,btnBuscar;
23 │ private EditText txtId,txtName,txtLastName,txtDirection,txtPhone,txtAge,txtLabor_Old,txtSalary;
24 │ String name,last_name,direction,phone;
25 │ int id_em,age;
26 │ double labor_old,salary;
27 │
28 │ @Override
29 │ protected void onCreate(Bundle savedInstanceState) {
30 │ super.onCreate(savedInstanceState);
31 │ setContentView(R.layout.activity_edit_delete);
32 │
33 │ helper= new EmpleadoHelper(this);
34 │
35 │ btnBuscar = findViewById(R.id.btnBuscar);
36 │ btnEditar = findViewById(R.id.btnEditar);
37 │ btnEliminar = findViewById(R.id.btnEliminar);
38 │
39 │ txtId = findViewById(R.id.txt_Id);
40 │ txtName = findViewById(R.id.txt_Nombre);
41 │ txtLastName = findViewById(R.id.txt_Apellidos);
42 │ txtDirection = findViewById(R.id.txt_Direccion);
43 │ txtPhone = findViewById(R.id.txt_Telefono);
44 │ txtAge = findViewById(R.id.txt_Edad);
45 │ txtLabor_Old = findViewById(R.id.txt_Antiguedad);
46 │ txtSalary = findViewById(R.id.txt_Salario);
47 │
48 │ Bundle bundle =getIntent().getExtras();
49 │
50 │ if (bundle != null)
51 │ {
52 │
53 │
54 │ id_em = bundle.getInt("id");
55 │ name =bundle.getString("name");
56 │ last_name = bundle.getString("last_name");
57 │ direction = bundle.getString("direction");
58 │ phone = bundle.getString("phone");
59 │ age= bundle.getInt("age");
60 │ labor_old = bundle.getDouble("labor_old");
61 │ salary = bundle.getDouble("salary");
62 │ }
63 │ pasarDatos();
64 │
65 │ btnEliminar.setOnClickListener(new View.OnClickListener() {
66 │ @Override
67 │ public void onClick(View view) {
68 │ SQLiteDatabase db = helper.getWritableDatabase();
69 │
70 │ String selection = ContractEntries.COLUMN_NUMERO_EMPLEADO + " LIKE ?";
71 │ String [] args = new String[]{String.valueOf(id_em)};
72 │
73 │ db.delete(ContractEntries.TABLE_EMPLEADO,selection,args);
74 │
75 │ }
76 │ });
77 │
78 │ btnEditar.setOnClickListener(new View.OnClickListener() {
79 │ @Override
80 │ public void onClick(View view) {
81 │ SQLiteDatabase db = helper.getWritableDatabase();
82 │
83 │
84 │ String name_,last_name_,direction_,phone_;
85 │ int age_;
86 │ double labor_old_,salary_;
87 │
88 │ last_name_=txtLastName.getText().toString();
89 │ name_ = txtName.getText().toString();
90 │ direction_ = txtDirection.getText().toString();
91 │ phone_ = txtPhone.getText().toString();
92 │ age_ = Integer.parseInt(txtAge.getText().toString());
93 │ labor_old_ = Double.parseDouble(txtLabor_Old.getText().toString());
94 │ salary_ = Double.parseDouble(txtSalary.getText().toString());
95 │
96 │ ContentValues values = new ContentValues();
97 │ values.put(ContractEntries.COLUMN_APELLIDOS_EMPLEADO,last_name_);
98 │ values.put(ContractEntries.COLUMN_NOMBRE_EMPLEADO,name_);
99 │ values.put(ContractEntries.COLUMN_DIRECCION_EMPLEADO,direction_);
100 │ values.put(ContractEntries.COLUMN_TELEFONO_EMPLEADO,phone_);
101 │ values.put(ContractEntries.COLUMN_EDAD_EMPLEADO,age_);
102 │ values.put(ContractEntries.COLUMN_ANTIGUEDAD_EMPLEADO,labor_old_);
103 │ values.put(ContractEntries.COLUMN_SALARIO_EMPLEADO,salary_);
104 │
105 │ String selection = ContractEntries.COLUMN_NUMERO_EMPLEADO + " LIKE ?";
106 │
107 │ String [] args = {String.valueOf(id_em)};
108 │
109 │ db.update(ContractEntries.TABLE_EMPLEADO,values,selection,args);
110 │
111 │ }
112 │ });
113 │ btnBuscar.setOnClickListener(v -> buscarNombre());
114 │
115 │ }
116 │ private void pasarDatos()
117 │ {
118 │ txtId.setText(String.valueOf(id_em));
119 │ txtName.setText(name);
120 │ txtLastName.setText(last_name);
121 │ txtDirection.setText(direction);
122 │ txtPhone.setText(phone);
123 │ txtAge.setText(String.valueOf(age));
124 │ txtLabor_Old.setText(String.valueOf(labor_old));
125 │ txtSalary.setText(String.valueOf(salary));
126 │ }
127 │ @SuppressLint("Range")
128 │ private void buscarNombre()
129 │ {
130 │ try {
131 │ String nombre = txtName.getText().toString();
132 │ listaEmpleado = new ArrayList<>();
133 │
134 │ SQLiteDatabase db = helper.getReadableDatabase();
135 │
136 │ String selection = ContractEntries.COLUMN_NOMBRE_EMPLEADO + " LIKE ?";
137 │ String [] args = {nombre};
138 │ Cursor cursor = db.query(
139 │ ContractEntries.TABLE_EMPLEADO,
140 │ null,
141 │ selection,
142 │ args,
143 │ null,
144 │ null,
145 │ null
146 │ );
147 │
148 │ while (cursor.moveToNext()) {
149 │ String name, last_name, direction, phone;
150 │ int id, age;
151 │ double labor_old, salary;
152 │
153 │ id = cursor.getInt(cursor.getColumnIndex(ContractEntries.COLUMN_NUMERO_EMPLEADO));
154 │ name = cursor.getString(cursor.getColumnIndex(ContractEntries.COLUMN_NOMBRE_EMPLEADO));
155 │ last_name = cursor.getString(cursor.getColumnIndex(ContractEntries.COLUMN_APELLIDOS_EMPLEADO));
156 │ direction = cursor.getString(cursor.getColumnIndex(ContractEntries.COLUMN_DIRECCION_EMPLEADO));
157 │ phone = cursor.getString(cursor.getColumnIndex(ContractEntries.COLUMN_TELEFONO_EMPLEADO));
158 │ age = cursor.getInt(cursor.getColumnIndex(ContractEntries.COLUMN_EDAD_EMPLEADO));
159 │ labor_old = cursor.getDouble(cursor.getColumnIndex(ContractEntries.COLUMN_ANTIGUEDAD_EMPLEADO));
160 │ salary = cursor.getDouble(cursor.getColumnIndex(ContractEntries.COLUMN_SALARIO_EMPLEADO));
161 │
162 │ listaEmpleado.add(new Empleado(id, last_name, name, direction, phone, age, labor_old, salary));
163 │ Toast.makeText(this, "->" + last_name, Toast.LENGTH_SHORT).show();
164 │
165 │ txtId.setText(String.valueOf(id));
166 │ txtLastName.setText(last_name);
167 │ txtDirection.setText(direction);
168 │ txtPhone.setText(phone);
169 │ txtAge.setText(String.valueOf(age));
170 │ txtLabor_Old.setText(String.valueOf(labor_old));
171 │ txtSalary.setText(String.valueOf(String.valueOf(salary)));
172 │ }
173 │ cursor.close();
174 │ }catch (Exception e){
175 │ Toast.makeText(this, "Busca por nombre", Toast.LENGTH_SHORT).show();
176 │ }
177 │
178 │ }
179 │ }
Ejemplo se encuentra en: