0% encontró este documento útil (0 votos)
52 vistas

Programación Multimedia - 2 DAM - Bases de Datos en Android - SQLite

El documento describe el uso de SQLite como motor de base de datos en aplicaciones Android. SQLite es una base de datos ligera y autónoma que se almacena en el dispositivo. Android proporciona APIs para crear, consultar y actualizar bases de datos SQLite de forma sencilla. Se utiliza la clase SQLiteOpenHelper para crear y gestionar la base de datos, y métodos como query(), insert() y delete() para realizar consultas y modificaciones de datos.

Cargado por

Alejandro
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PPTX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
52 vistas

Programación Multimedia - 2 DAM - Bases de Datos en Android - SQLite

El documento describe el uso de SQLite como motor de base de datos en aplicaciones Android. SQLite es una base de datos ligera y autónoma que se almacena en el dispositivo. Android proporciona APIs para crear, consultar y actualizar bases de datos SQLite de forma sencilla. Se utiliza la clase SQLiteOpenHelper para crear y gestionar la base de datos, y métodos como query(), insert() y delete() para realizar consultas y modificaciones de datos.

Cargado por

Alejandro
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PPTX, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 32

2 - Programación de aplicaciones para

dispositivos móviles
SQLite
SQLite

Es un motor de base de datos SQL transaccional de código abierto, ligero, autónomo, de


configuración simple y sin servidor, que se caracteriza por almacenar información persistente
de forma sencilla, SQLite gracias a sus características se diferencia de otros gestores de bases
de datos, proporcionando grandes ventajas sobre ellos.

Así mismo, por ser de dominio público es gratuito tanto para fines privados como para
comerciales, se puede descargar de forma libre desde su sitio oficial. Es importante mencionar
que SQLite cuenta con varios enlaces a lenguajes de programación entre los que podemos
destacar: Java, C, C ++, JavaScript, C #, Python, VB Script, entre otros.
SQLite

Android incorpora de serie todas las herramientas necesarias para la creación y gestión de
bases de datos SQLite, y entre ellas una completa API para llevar a cabo de manera sencilla
todas las tareas necesarias.

En Android, la forma típica para crear, actualizar, y conectar con una base de datos SQLite será
a través de una clase auxiliar llamada SQLiteOpenHelper, o para ser más exactos, de una clase
propia que derive de ella y que debemos personalizar para adaptarnos a las necesidades
concretas de nuestra aplicación.
SQLite

La clase SQLiteOpenHelper tiene tan sólo un constructor, que normalmente no necesitaremos


sobrescribir, y dos métodos abstractos, onCreate() y onUpgrade(), que deberemos
sobreescribir utilizando el código que queramos.
onCreate() se ejecutará automáticamente cuando no exista la base de datos, y creará todas las
tablas.
onUpgrade() se ejecutará automáticamente cuando haya una actualización de la base de
datos, por ejemplo cuando se añadan columnas a una tabla, haya que migrar datos de una
base de datos a otra…
Para ejecutar las consultas contra la base de datos se utilizará la función execSQL()
SQLite
SQLite
SQLite
Una vez definida nuestra clase helper, la apertura de la base de datos desde nuestra
aplicación resulta ser algo de lo más sencillo. Lo primero será crear un objeto de la clase
patatasSQL al que pasaremos el contexto de la aplicación (en el ejemplo una referencia a la
actividad principal), el nombre de la base de datos, un objeto CursorFactory que
típicamente no será necesario (en ese caso pasaremos el valor null), y por último
la versión de la base de datos que necesitamos. La simple creación de este objeto puede
tener varios efectos:
• Si la base de datos ya existe y su versión actual coincide con la solicitada simplemente se
realizará la conexión con ella.
• Si la base de datos existe pero su versión actual es anterior a la solicitada, se llamará
automáticamente al método onUpgrade() para convertir la base de datos a la nueva
versión y se conectará con la base de datos convertida.
• Si la base de datos no existe, se llamará automáticamente al método onCreate() para
crearla y se conectará con la base de datos creada.
SQLite

Primero tenemos que crear un objeto de la clase Helper que hemos personalizado.
Como ya se ha explicado, esto creará o modificará la BBDD.
Una vez tengamos el helper, podemos acceder a ella mediante la interfaz SQLLiteDatabase, en
uno de sus dos modos, de escritura o de lectura.
Es recomendable tener ambas variables en ámbito global y no local.
SQLite
Ahora que ya sabemos crear bases de datos, vamos a ver cómo funcionan las operaciones
de crear, insertar y borrar:
La API de SQLite de Android proporciona dos alternativas para realizar operaciones sobre la
base de datos que no devuelven resultados (entre ellas la
inserción/actualización/eliminación de registros, pero también la creación de tablas, de
índices, etc).
El primero es utilizar el método execSQL() de la clase SQLiteDatabase. Este método permite
ejecutar cualquier sentencia SQL sobre la base de datos, siempre que ésta no devuelva
resultados.
SQLite

La sintaxis es muy parecida a JDBC


SQLite
La segunda de las alternativas disponibles en la API de Android es utilizar los métodos
insert(), update() y delete() proporcionados también con la clase SQLiteDatabase. Estos
métodos permiten realizar las tareas de inserción, actualización y eliminación de registros de
una forma algo más paramétrica que execSQL(), separando tablas, valores y condiciones en
parámetros independientes de estos métodos.
Vamos a verlos uno a uno:
SQLite
El método insert() para insertar nuevos registros en la base de datos. Este método recibe
tres parámetros:
• El nombre de la tabla
• el segundo lo obviaremos por el momento ya que tan sólo se hace necesario en casos
muy puntuales (por ejemplo para poder insertar registros completamente vacíos), en
cualquier otro caso pasaremos con valor null este segundo parámetro.
• el tercero serán los valores del registro a insertar
Los valores a insertar los pasaremos como elementos de una colección de tipo
ContentValues. Esta colección es de tipo diccionario, donde almacenaremos parejas de
clave-valor (como cuando enviábamos datos en un Intent), donde la clave será el nombre
de cada campo y el valor será el dato correspondiente a insertar en dicho campo.
SQLite
SQLite
Los métodos update() y delete() se utilizarán de forma muy parecida a ésta, pero con un
parámetro nuevo con la condición WHERE de la sentencia SQL.
Si dicho parámetro lo pasamos vacío, se ejecutaría la consulta sin WHERE.
SQLite
Al igual que la interfaz PreparedStatement de la librería JDBC, podemos utilizar parámetros
que aportaremos en un array de valores aparte. Estos argumentos SQL se indicarán con el
símbolo ‘?‘, y los valores de dichos argumentos deben pasarse en el array en el mismo orden
que aparecen en la sentencia SQL.
Los argumentos tienen que pasarse con el tipo de dato String[], un array de String.
SQLite
De forma análoga a lo que vimos para las sentencias de modificación de datos, vamos a
tener dos opciones principales para recuperar registros de una base de datos SQLite en
Android. La primera de ellas utilizando directamente un comando de selección SQL, y como
segunda opción utilizando un método específico donde parametrizaremos la consulta a la
base de datos.
Para la primera opción utilizaremos el método rawQuery() de la clase SQLiteDatabase. Este
método recibe directamente como parámetro un comando SQL completo, donde indicamos
los campos a recuperar y los criterios de selección. El resultado de la consulta lo
obtendremos en forma de cursor, que posteriormente podremos recorrer para procesar los
registros recuperados
SQLite
Como segunda opción para recuperar datos podemos utilizar el método query() de la clase
SQLiteDatabase. Este método recibe varios parámetros: el nombre de la tabla, un array con
los nombre de campos a recuperar, la cláusula WHERE, un array con los argumentos
variables incluidos en el WHERE (si los hay, null en caso contrario), la cláusula GROUP BY si
existe, la cláusula HAVING si existe, y por último la cláusula ORDER BY si existe.
Opcionalmente, se puede incluir un parámetro al final más indicando el número máximo de
registros que queremos que nos devuelva la consulta.
SQLite
SQLite
SQLite
Los resultados se devuelven nuevamente en un objeto Cursor que deberemos recorrer para
procesar los datos obtenidos.
Para recorrer y manipular el cursor tenemos a nuestra disposición varios métodos de la clase
Cursor, entre los que destacamos dos de los dedicados a recorrer el cursor de forma
secuencial y en orden natural:
• moveToFirst(): mueve el puntero del cursor al primer registro devuelto.
• moveToNext(): mueve el puntero del cursor al siguiente registro devuelto.
SQLite
Una vez posicionados en cada registro podremos utilizar cualquiera de los métodos
getXXX(índice_columna) existentes para cada tipo de dato para recuperar el dato de cada
campo del registro actual del cursor. Así, si queremos recuperar por ejemplo la segunda
columna del registro actual, y ésta contiene un campo alfanumérico, haremos la llamada
getString(1) [NOTA: los índices comienzan por 0 (cero), por lo que la segunda columna tiene
índice 1], en caso de contener un dato de tipo real llamaríamos a getDouble(1), y de forma
análoga para todos los tipos de datos existentes.
Otro método útil es getColumnIndex(nombre columna) que nos devolverá el índice de la
columna con el nombre que se le pasa como parámetro. Si hay alguna columna de la cual no
sabemos su índice, podemos utilizar estos dos métodos para obtener el valor de la columna.
SQLite
SQLite
¿Y cuándo se cierra la conexión?
Pensad que una aplicación puede estar corriendo durante un tiempo variante e inexacto, y
no sigue un flujo secuencial como un programa Java.
Por ello, tenemos que modificar el método OnDestroy(), que se ejecutará cuando se
destruya la actividad (recordar ciclo de la actividad) y añadir la instrucción de cerrar la
conexión, en ningún otro lado puesto que si la abrimos en el OnCreate() es recomendable no
ir cerrando y abriendo hasta que nos aseguremos de que NO la necesitamos más.
SQLite
Ahora que ya sabemos cómo interactuar con la BBDD, nos tenemos que preguntar, y esta
BBDD, ¿dónde está?
Esta BBDD se crea dentro del sistema Android implementado en nuestro emulador AVD.
Todas se almacenan en la memoria del teléfono en un fichero con el mismo nombre de la
base de datos situado en una ruta que sigue el siguiente patrón:

/data/data/paquete.java.de.la.aplicacion/databases/nombre_base_datos

Podemos acceder a los ficheros y la memoria de nuestro emulador si accedemos a la


pestaña de File Explorer, que posiblemente estará en la esquina inferior derecha de Android
Studio. Si tenemos un emulador activado, esta pestaña nos mostrará el árbol de ficheros de
nuestro emulador.
SQLite
SQLite
SQLite
En mi caso la BBDD estaba en

/data/data/com.sqlite/databases/DBPatatas

Para acceder a la BBDD podemos hacerlo de varias formas:


1. Nos podríamos conectar al emulador desde una terminal de comandos utilizando el
comando adb, y de ahí utilizar el comando sqlite3 para poder conectarnos.
2. Podemos utilizar un cliente para conectarnos a la base de datos, tras habérnosla
descargado a nuestro PC. Pensad que la BBDD está en el móvil, y si queremos acceder en
local la podremos descargar y desde allí visualizarla. Para descargar cualquier fichero
desde el file explorer hay que darle a botón derecho > Save As..
Un cliente gratuito es SQLLite Administrator, que podréis bajar desde aquí:
http://sqliteadmin.orbmu2k.de/
SQLite
SQLite
La visualización de la BBDD usando un cliente no debe ser una tarea obligatoria para el
desarrollo, si no para comprobar los datos de una forma más visual.
La desventaja es que primero hay que descargar la BBDD para poder los datos, con lo cual la
visualización no es en tiempo real todo el rato.
Si queréis conectarlos al emulador utilizando la cmd de Windows mirad este tutorial:
https://gist.github.com/gayanvirajith/3e51ff50a916555542cce171fe4e948a
SQLite

Primero tenemos que irnos a la carpeta de la instalación de Android Studio, para poder
acceder al comando adb.
Con adb devices vemos los emuladores disponibles
Con adb –s emulador Shell accedemos a la Shell o terminal del emulador.
Si no podemos acceder a la BBDD que queremos, nos metemos como administrador
utilizando su.
SQLite

Cuando estemos en la ruta donde se encuentre la bbdd, abrimos dicho archivo utilizando
sqlite3 y el nombre de la BBDD.
Con .tables vemos las tablas que forman la base de datos, y ya aquí podemos ejecutar
nuestras consultas como si estuviéramos en una BBDD relacional cualquiera.
SQLite
Para practicar, descargaos el proyecto de ejemplo desde el GitHub, y revisad el código,
ejecutadlo para ver cómo funciona y qué hace, qué hace cada función…
Vamos a añadir algunas mejoras antes de hacer la práctica:
1. Modifica el handler del botón ‘buscar’ para poder hacer unas búsquedas por el nombre
o el precio
2. Actualiza el handler del botón de modificar para que no se modifique siempre el objeto
con id 2 si no que se modifique el precio de todas las patatas que tengan el nombre que
introduzca el usuario en el cuadro de texto.
3. Modifica el handler del botón de buscar todos para agrupar las patatas según el nombre
y el número de registros con el mismo nombre (función count(*))

También podría gustarte