Sei sulla pagina 1di 25

Manejo de SQLite en Android

En Android, la forma tpica para crear, actualizar, y conectar con una base de datos SQLite ser a travs de una clase auxiliar llamada SQLiteOpenHelper. O para ser ms exactos, de una clase propia que derive de ella y que debemos personalizar para adaptarnos a las necesidades concretas de nuestra aplicacin

La API de SQLite de Android proporciona dos alternativas para realizar operaciones sobre la base de datos que no devuelven resultados.
Insercin Actualizacin eliminacin de registros, Creacin de tablas, de ndices Etc.

Mtodo execSQL()
De la clase SQLiteDatabase. Este mtodo permite ejecutar cualquier sentencia SQL sobre la base de datos, siempre que sta no devuelva resultados

Los mtodos insert(), update() y delete()


Proporcionados tambin con la clase SQLiteDatabase. Estos mtodos permiten realizar las tareas de:
Insercin Actualizacin Eliminacin de registros

de una forma algo ms paramtrica que execSQL()

Los mtodos insert(), update() y delete()


De una forma algo ms paramtrica que execSQL(). Separando tablas, valores y condiciones en parmetros independientes de estos mtodos.

Mtodo insert()
Para insertar nuevos registros en la base de datos. Recibe tres parmetros.
El primero de ellos ser el nombre de la tabla. El tercero sern los valores del registro a insertar. El segundo lo obviaremos por el momento ya que tan slo se hace necesario en casos muy puntuales (por ejemplo para poder insertar registros completamente vacos), en cualquier otro caso pasaremos con valor null este segundo parmetro.

Mtodo insert()
Los valores a insertar los pasaremos como elementos de una coleccin de tipo ContentValues. Esta coleccin es de tipo diccionario, donde almacenaremos parejas de clave-valor
la clave ser el nombre de cada campo el valor ser el dato correspondiente a insertar en dicho campo.

Mtodo insert()

Los mtodos update() y delete()


Se utilizarn de forma muy parecida a insert(). reciben un parmetro adicional con la condicin WHERE de la sentencia SQL. Por ejemplo, para actualizar el email del usuario de nombre usu1 haramos lo siguiente:

Los mtodos update() y delete()


Como tercer parmetro del mtodo update() pasamos directamente la condicin del UPDATE tal como lo haramos en la clusula WHERE en una sentencia SQL normal. El mtodo delete() se utilizara de forma anloga. Por ejemplo para eliminar el registro del usuario usu2 haramos lo siguiente

Los mtodos update() y delete()


Volvemos a pasar:
Como primer parmetro el nombre de la tabla En segundo lugar la condicin WHERE. Por supuesto, si no necesitramos ninguna condicin, podramos dejar como null en este parmetro.

Un ltimo detalle sobre estos mtodos


Tanto en el caso de execSQL() como en los casos de update() o delete() podemos utilizar argumentos dentro de las condiciones de la sentencia SQL. Esto no es ms que partes variables de la sentencia SQL que aportaremos en un array de valores aparte. Estos argumentos SQL se indicarn con el smbolo ?, y los valores de dichos argumentos deben pasarse en el array en el mismo orden que aparecen en la sentencia SQL.

Un ltimo detalle sobre estos mtodos


As, por ejemplo, podemos escribir instrucciones como la siguiente:

Esta forma de pasar a la sentencia SQL determinados datos variables puede ayudarnos adems a escribir cdigo ms limpio y evitar posibles errores.

De forma anloga a lo que vimos para las sentencias de modificacin de datos, vamos a tener dos opciones principales para recuperar registros de una base de datos SQLite en Android
Utilizando directamente un comando de seleccin SQL. Utilizando un mtodo especfico donde parametrizremos la consulta a la base de datos

mtodo rawQuery()
De la clase SQLiteDatabase Recibe directamente como parmetro un comando SQL completo.
indicamos los campos a recuperar y los criterios de seleccin.

El resultado de la consulta lo obtendremos en forma de cursor.

mtodo rawQuery()
Sirva la siguiente consulta a modo de ejemplo:

mtodo rawQuery()
Tambin podemos aadir a este mtodo una lista de argumentos variables que hayamos indicado en el comando SQL con el smbolo ?, por ejemplo as:

mtodo query()
De la clase SQLiteDatabase. Recibe varios parmetros:

El nombre de la tabla. Un array con los nombre de campos a recuperar. La clusula WHERE. Un array con los argumentos variables incluidos en el WHERE (si los hay, null en caso contrario). La clusula GROUP BY si existe. La clusula HAVING si existe. Por ltimo la clusula ORDER BY si existe. Opcionalmente, se puede incluir un parmetro ms al final indicando el nmero mximo de registros que queremos que nos devuelva la consulta.

mtodo query()
Veamos el mismo ejemplo anterior utilizando el mtodo query():

Los resultados se devuelven nuevamente en un objeto Cursor que deberemos recorrer para procesar los datos obtenidos.

Recorrer un Cursor
Para recorrer y manipular el cursor devuelto por cualquiera de los dos mtodos mencionados tenemos a nuestra disposicin varios mtodos de la clase Cursor.
moveToFirst(): mueve el puntero del cursor al primer registro devuelto. moveToNext(): mueve el puntero del cursor al siguiente registro devuelto.

Recorrer un Cursor
Los mtodos moveToFirst() y moveToNext() devuelven TRUE en caso de haber realizado el movimiento correspondiente del puntero sin errores. Posicionados en cada registro podremos utilizar cualquiera de los mtodos getXXX(ndice_columna) existentes para cada tipo de dato para recuperar el dato de cada campo del registro actual del cursor

Recorrer un Cursor
Con todo esto en cuenta, veamos cmo podramos recorrer el cursor devuelto por el ejemplo anterior:

Recorrer un Cursor
Con todo esto en cuenta, veamos cmo podramos recorrer el cursor devuelto por el ejemplo anterior:

Otros mtodos de la clase Cursor


getCount() te dir el nmero total de registros devueltos en el cursor. getColumnName(i) devuelve el nombre de la columna con ndice i. moveToPosition(i) mueve el puntero del cursor al registro con ndice i. etc.