Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Ejemplos de SQLite PDF
Ejemplos de SQLite PDF
El gestor de bases de datos por defecto de Android es Lite. SQLite es una base de datos
transaccional ligera que ocupa una cantidad muy pequea de espacio en disco y
memoria, de manera que es la eleccin perfecta para crear bases de datos en sistemas
operativos para mviles como Android o iOS.
Aspectos a tener en cuenta cuando se maneja SQLite:
1. SQLite no dispone de control de integridad, por lo que puedes almacenar un
valor de un cierto tipo en un campo de otro tipo distinto (por ejemplo poner un
string e un integer o viceversa)
2. SQLite no gestiona directamente la integridad referencial, no soporta
restricciones FOREIGN KEY (clave externa) ni sentencias JOIN. No obstante, se
puede controlar mediante triggers.
3. El soporte completo de Unicode es opcional y no est instalado por defecto.
En este tutorial crearemos una base de datos simple para almacenar la informacin
bsica de una serie de empleados. La base de datos dispone de:
Tablas
1. TEmpleados
2. TDepartamentos
Vistas
1. vistaEmpleados: para visualizar los empleados y los departamentos de la
empresa relacionados a los que pertenecen.
final
final
final
final
final
String
String
String
String
String
tablaEmpleados="TEmpleados";
colID="idEmpleado";
colNombre="nombreEmpleado";
colEdad="edad";
colDept="departamento";
static
static
static
static
final
final
final
final
String
String
String
String
tablaDepartamentos="TDepartamentos";
colDeptID="idDept";
colDeptNombre="nombreDept";
vistaEmps="vistaEmpleados";
El constructor
public BaseDeDatos(Context context) {
super(context, nombreBD, null,33);
}
Cursor por defecto para recoger los resultados de las consultas, por lo que el
parmetro es null.
Version: la versin del esquema de la base de datos. El constructor crea una
base de datos en blanco con el nombre y el nmero de versin especificados.
El mtodo crea las tablas con sus correspondientes campos, una vista y un trigger. El
mtodo es invocado cuando se crea la base de datos, es decir, cuando la base de datos
no existe en el disco y se ejecuta slo una vez en el mismo dispositivo: la primera vez
que la aplicacin corre en dicho dispositivo.
TRIGGER
TRIGGER
TRIGGER
VIEW IF
IF EXISTS dept_id_trigger");
IF EXISTS dept_id_trigger22");
IF EXISTS fk_empdept_deptid");
EXISTS "+vistaEmps);
cv);
cv);
cv);
cv);
Cambiando valores
Para ejecutar una sentencia update disponemos de dos mtodos diferentes:
1. ejecutar bd.execSQL()
2. o invocar el mtodo bd.update():
public int actualizarDatosEmpleado(Empleado emp)
{
SQLiteDatabase bd=this.getWritableDatabase();
ContentValues cv=new ContentValues();
cv.put(colNombre, emp.getNombre());
cv.put(colEdad, emp.getEdad());
cv.put(colDept, emp.getDept());
return bd.update(tablaEmpleados, cv, colID+"=?", new String
[]{String.valueOf(emp.getID())});
}
Eliminando registros
Como con update, para ejecutar una sentencia delete disponemos de dos mtodos:
1. ejecutar bd.execSQL()
2. o invocar el mtodo bd.delete():
public void eliminarEmpleado(Empleado emp)
{
SQLiteDatabase bd=this.getWritableDatabase();
bd.delete(tablaEmpleados,colID+"=?",
new String [] {String.valueOf(emp.getID())});
bd.close();
}
Notas
1. El resultado de una consulta se devuelve en un objeto de la clase Cursor.
2. En una sentencia select si la columna de la clave primaria (el campo id) tiene
un nombre distino a _id, entonces tienes que emplear un alias de la forma
SELECT [nombre campo] as _id. En otras palabras, el objeto Cursor espera
siempre que el campo de la clave primaria tenga como nombre _id, de lo
contrario, lanzar una excepcin.
Otra forma de llevar a cabo una consulta de seleccin es usando el mtodo
bd.query(). Una consulta para listar los empleados de un determinado departamento
a partir de una vista tendra el siguiente aspecto:
public Cursor getEmpleadoPorDept(String Dept)
{
SQLiteDatabase bd=this.getReadableDatabase();
String [] columns=new
String[]{"_id",colNombre,colEdad,colDeptNombre};
Cursor c = bd.query(vistaEmps, columns,
colDeptNombre+"=?", new String[]{Dept}, null, null, null);
return c;
}
Manejando cursores
Los resultados de las consultas se recogen en objetos de tipo Cursor. Existen algunos
mtodos comunes que podrs utilizar con los cursores:
1. boolean moveToNext(): avanza el cursor una posicin (siguiente registro) en
la tabla de resultados. Devuelve false si el movimiento supone ir ms all del
ultimo registro.
2. boolean moveToFirst(): retrocede el cursor hasta el primer registro del
conjunto de resultados. Devuelve false si el conjunto de resultados est vaco.
3. boolean moveToPosition(int position): desplaza el cursor a la posicin de
un determinado registro. Devuelve false si la posicin no es alcanzable.
4. boolean moveToPrevious(): mueve el cursor al registro anterior al actual en el
conjunto de resultados. Devuelve false si la posicin va ms all de la pimera
fila.
5. boolean moveToLast(): mueve el cursor al ultimo registro del conjunto de
resultados. Devuelve false si el conjunto de resultados est vaco.
Tambin existen mtodos muy tiles para comprobar la posicin actual de un cursor:
boolean
isAfterLast(),
isBeforeFirst,
isFirst,
isLast
y
isNull(columnIndex). Por otra parte, si tienes un conjunto de resultados con un nico
registro y necesitas acceder el valor de un determinado campo del mismo se puede
proceder de la siguiente manera:
public int getIDdepartamento(String Dept)
{
SQLiteDatabase bd=this.getReadableDatabase();
Cursor c=bd.query(tablaDepartamentos, new String[]{colDeptID+
" as _id",colDeptNombre},colDeptNombre+"=?", new
String[]{Dept}, null, null, null);
c.moveToFirst();
return c.getInt(c.getColumnIndex("_id"));
}