32: Android: bases de datos

Bases de datos en Android

El software que gestiona las bases de datos que usa Android es SQLite.

Para incluir bases de datos en nuestras aplicaciones Android, crearemos clases que deriven de la clase abstracta "SQLiteOpenHelper".

Las clase SQLiteOpenHelper es una clase con métodos abstractos en su interior, así que para crear una clase hija de la clase anterior, tendremos que implementar los siguiente métodos en su interior:
  • onCreate(): este método hay que implementarlo, y contendrá el código que queremos que se ejecute cuando se instancie la clase que deriva de "SQLiteOpenHelper". Por lo general, dicho código contendrá la sentencia que crea la base de datos.
  • onUpgrade(): este método hay que implementarlo, y contendrá el código que queremos que se ejecute cuando se instancie  la clase que deriva de "SQLiteOpenHelper".

  • onOpen() -> esta es opcional.
 Además tenemos estos dos métodos adicionales a los que vamos a llamar también:
  • getReadableDatabase(): abre la base de datos en modo solo lectura.

  • getWritableDatabase():  abre la base de datos en modo lectura y escritura.

Crear una base de datos

El primer paso es crear la base de datos de nuestra aplicación. El código necesario para ello lo vamos a escribir en una clase hija de la clase "SQLiteOpenHelper" que vamos a crear, tal y como hemos mencionado antes.

La base de datos que vamos a crear se llamará "lugares", y contendrá una tabla que se llamará "lugar". La tabla "lugar" tendrá 3 columnas: "id", "nombre" y "descripcion".

El código de la clase de hija de "SQLiteOpenHelper" que vamos a crear es este:


Como vemos es una clase que hereda de "SQLiteOpenHelper", y alberga 3 métodos:

  • El 1º de los métodos es el constructor de la clase. En su interior, llamamos al constructor de la clase madre, y le pasamos 4 argumentos. De eso 4 el que más no interesa es el segundo: el nombre que le queremos asignar la la base de datos.

  • El 2º de los métodos es el método "onCreate()", que como hemos dicho antes, es un método que se ejecuta siempre que creamos una base de datos. Detalle: recibe como argumento, la base de datos que acabamos de crear. Puesto que nuestra base de datos esta vacia, aprovecharemos el interior de este método para añadir la tabla "lugar" a la base de datos. Para ello, en su interior, llamamos a un método llamado "execSQL()" al que le pasamos como argumeno la sentencia SQL que crea la tabla "lugar".
  • IMPORTANTE: en esta sentencia SQL, hemos definido la columna "id" como entero ("INTEGER"), como "clave primaria" ("PRIMARY KEY"), y como autoincrementable ("AUTOINCREMENT"). Los otros dos campo (nombre y descripcion) los hemos definido de tipo "TEXT"
  • El 3º de los métodos es "onUpgrade()" que de momento no tiene cuerpo.

OK, ya tenemos creada la clase que creará la base de datos, pero todavia no la hemos creado. Para ello, vamos a instanciar esta clase desde la clase MainActivity. De esta manera, la base de datos "lugares" y la tabla "lugar" se creará cuando ejecutemos la aplicación.


Formulario para introducir un nuevo registro en la tabla "lugar" (INSERT INTO)

Para introducir un registro en la tabla "lugar", crearemo un actividad aparte con un layout asociado como este:




El código de la nueva actividad será algo parecido a esto:



Fijate en las última 3 lineas . En realidad son las 3 últimas lineas las que introducen un nuevo registro en la tabla "lugar". Del mismo modo que creabamos la base de datos, aquí también estamos utilizando el método "execSQL()".

**Alternativa más comoda a las anteriores 3 lineas**

En el caso de que nos parezca complicada la manera en que se ha construido la sentencia "INSERT INTO" podemos usar las lineas que aparecen en el marco rojo de la siguiente imagen:


Para acceder comodamente a esta nueva actividad "NuevoLugarActivity" que acabamos de crear, podemos añadir un botón en "activiy_main.xml"  que la muestre. Para ello, crearemos un  archivo "activity_main.xml" como el que se muestra aquí abajo, y el código de "MainActivity.java" sería el que aparece a continuación:






Mostrar la lista de lugares

Para mostrar la lista de lugares, crearemos una nueva actividad llamada "ListaLugar.java", y un layout llamado "activity_nuevo_lugar.xml". El layout sera un elemento "LinearLayout" vertical vacio que se ira rellenando con los datos de la tabla "lugar".

Esa es la clase "ListaLugar.java":


El resultado de la actividad lista será este:



























Comentarios

Entradas populares de este blog

5. CSS: formatear un documento HTML

34. Java: final, static, constantes, colecciones

29. Android: tipos de layouts