Bases de Datos, BBDD

Una de las maneras de que gestionemos datos estructurados (filas-columnas) es a través de tablas, almacenadas en bases de datos. SQL (Structured Query Language) nos permite tener el interfaz adecuado para almacenar nuestros datos con la estructura diseñada por nosotros.

En Android tenemos SQLite para gestionar nuestras tablas junto con el comando sqlite3 para acceder desde shell a los datos. Otra de las opciones que nos ofrece Android para guardar nuestros datos es a través de  Content Provider. Según el uso que vayamos a darle a los datos elegiremos una opción u otra. En general, si los datos no van a ser usados por otras aplicaciones, si no que únicamente los solicita nuestra aplicación, es preferible usar la opción SQLite. Si por el contrario los datos van a ser compartidos por más aplicaciones, haremos uso necesariamente de Content Providers.

Un Content Provider es un  proveedor de datos. Permite el acceso a los datos almacenados desde múltiples aplicaciones. Para usar un content provider, se ha de especificar un URI (identificador uniforme de recursos) y cómo actuar con los datos (operaciones básicas de insertar, preguntar, actualizar y borrar). Usando content provider, la aplicación puede compartir datos con otras aplicaciones y gestionar el modelo de datos de una aplicación.

Gestionando bases de datos con aplicaciones Android

Si nuestra aplicación hace uso de bases de datos SQLite, la base de datos (.db) junto con las tablas de las que se disponga y sus datos se almacenan en la siguiente carpeta:

/data/data/com.xxx.yyy/databases

En caso de que la base de datos no exista, se creará automáticamente.

Para visualizar sus datos desde Eclipse, añadimos la perspectiva DDMS (Dalvik Debug Monitor Server). Para ello  desde Eclipse hacemos click en

Window > Open Perspective > Other

Seleccionamos la opción DDMS  hacemos click en el botón OK.

Pantallazo-Open Perspective

Directamente se abre la perspectiva con el siguiente aspecto:

Pantallazo-DDMS - JL_1-src-com-example-JL_1-MainActivity.java - ADT

Sobre la pestaña File Explorer nos movemos hasta la carpeta indicada anteriormente donde se encuentra la base de datos de la aplicación. data > data > com.xxx.xxx.xxx > databases > xxx_bd_xx.db

Pantallazo-DDMS - JL_1-src-com-example-JL_1-MainActivity.java - ADT -1

Clases de bases de datos en Android

Las clases asociadas para el uso de bases de datos en Android son:

  • SQLiteDatabase: interfaz para el uso de la base de datos SQLite. Sentencias insert, query, update y delete.
  • Cursor: contenedor que almacena los resultados de las consultas a la base de datos.
  • SQLiteOpenHelper: ayuda en la actualización de la bases de datos y control de versiones.
  • SQLiteQueryBuilder: abstrae a alto nivel la construcción de querys.

La secuencia de trabajo a seguir sería:

  1. Crear la sentencia SQL
  2. Ejecutar la sentencia frente a la base de datos
  3. Mostrar el resultado al usuario

Más sobre manejo de bases de datos en Android.

Consola sqlite3

A nivel de terminal, seguiremos los siguientes pasos para acceder a la base de datos. Lo primero será situarnos en el directorio sdk/platform_tools para desde allí ejecutar el comando adb. Posteriormente seleccionamos nuestra bases de datos con el comando sqlite3

> cd sdk/platform-tools
> ./adb shell
> sqlite3 /data/data/ com.xxx.xxx.xxx/databases/xxx_bd_xx.db

Tecleando .help obtenemos un listado de todas las opciones disponibles. Destacamos

  • .databases, la cual nos dará un listado de todas las bases de datos existentes para ese proyecto
  • .tables, nos da un listado de las tablas existentes
  • .quit, nos permite salir de sqlite3
  • .mode, nos permite selecionar el modo en el que visualizamos los datos de las tablas.
  • Ver todas las opciones disponibles

Pantallazo-Terminal

El siguiente paso será realizar la operaciones oportunas sobre la base de datos como por ejemplo seleccionar todos los elementos de una tabla en concreto:

>select * from xxx_tabla_xxx;

Para salir de sqlite3 teclearemos .quit y posteriomente Ctrl-D para salir por completo

Más sobre sqlite3