Beruflich Dokumente
Kultur Dokumente
Una aplicación puede necesitar una base de datos para almacenar y realizar consultas sobre sus
datos. Android permite crear bases de datos con formato SQLite.
Una aplicación puede crear varias bases de datos. Estas bases de datos son privadas a la aplicación;
solamente ella tiene acceso.
En esta sección, veremos cómo crear una base de datos y agregar una tabla. A continuación veremos
cómo ejecutar consultas. Por último, veremos cómo modificar una base de datos existente.
Esta clase es abstracta, de modo que hay que crear una clase derivada que herede de ella. Esta
clase derivada debe invocar al constructor padre y pasarle como parámetros el nombre y la versión
de la base de datos. El número de versión se utiliza durante la actualización de la base de datos a
una nueva versión como veremos más adelante.
Heredando de la clase padre SQLiteOpenHelper, la clase derivada debe sobrecargar, entre otros,
el método onCreate. Este método permite especificar las consultas de creación de las tablas de la
base de datos.
Sintaxis
Ejemplo
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE miTabla ( _id INTEGER PRIMARY KEY
AUTOINCREMENT, nombre TEXT );");
}
}
Sintaxis
Una vez terminados la creación y el uso de la base de datos, es preciso cerrarla invocando a
losmétodos close en el objeto de tipo SQLiteDatabase y, a continuación, en el objeto de
tipo SQLiteOpenHelper.
Sintaxis
Ejemplo
Para abrir una base de datos en modo sólo lectura, se reemplazará la llamada al
método getWritableDatabasepor el método getReadableDatabase.
Sintaxis
Ejemplo
Ejemplo
Sólo está permitido una sentencia por llamada a estos métodos. El uso de ’;’ para separar las
sentencias está, por tanto, prohibido.
Las consultas SQL pueden ejecutarse con los distintos métodos q uery que reciben distintos
parámetros de entrada como el nombre de la tabla, los nombres de los campos…
Cada uno de estos métodos devuelve un objeto de tipo Cu rsor que permite navegar por los
resultados de la consulta y extraer los datos. El cursor devuelto por el método query se
posicionaantes del primer registro.
Sintaxis
Ejemplo
La interfaz Cursorprovee todos los métodos que permiten navegar un juego de resultados de una
consulta. El acceso a los registros puede realizarse de forma secuencial (método moveToNext) o
directamente indicando un número de registro (método m oveToPosition).
Observe que no se debe olvidar invocar al método mo veToFirst antes de recorrer
secuencialmente una colección de registros, pues el método query posiciona el cursor antes del
primer registro.
Los principales métodos utilizados para recorrer un juego de registros se enumeran en la tabla a
continuación.
b. Lectura de datos
Para leer los datos de un registro - las columnas del resultado de una consulta SQL, la
interfaz Cursorexpone tantos métodos como tipos de datos posibles existen en una base de
datos SQLite.
En estos métodos, la columna que se quiere leer se indica como parámetro, mediante su índice. La
primera columna tiene el índice 0, y la última columna tiene el índice getColumnCount() - 1.
A continuación se muestra una tabla resumen de los métodos más utilizados para la lectura de un
registro.
3. Actualizaciones
Tras la creación de una nueva versión de la aplicación, es posible que la base de datos necesite
evolucionar, creando por ejemplo nuevas tablas, o modificando tablas existentes. Es preciso, en
estos casos, realizar una actualización de la base de datos.
Android integra un mecanismo específico que ayuda a actualizar la base de datos: en primer lugar se
invoca a uno de los métodos ge tReadableDataBase y getWritableDataBase, el sistema
compara el número de versión en curso (que se pasa como parámetro en la llamada del constructor
padre S QLiteOpenHelper) con el valor devuelto por el método getVersion. Si ambos números
de versión difieren, se invoca al método onUpgrade.
Basta, por tanto, con sobrecargar el método onUpgradecuya sintaxis es la siguiente:
Sintaxis
Ejemplo
Los usuarios no actualizan, necesariamente, las aplicaciones instaladas en su dispositivo con cada
nueva publicación, por lo que es importante gestionar, mediante el método onUpgrade, las posibles
actualizaciones desde cualquier número de versión.
Una de las formas de gestionar estas actualizaciones incrementales es escribir un bucle que vaya
desde oldVersion hasta newV ersion, y gestionar cada etapa con la ayuda de una
instrucción switch. Un posible esquema del método onUpgradepodría ser el siguiente:
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int
newVersion) {
for(int indiceVersion =oldVersion ; indiceVersion <newVersion;
indiceVersion ++) {
int nextVersion = indiceVersion+1;
switch(nextVersion) {
case 2 :
// actualización para la versión 2
break;
case 3 :
// actualización para la versión 3
break;
...
}
}
Por último, para asegurar que la base de datos se mantiene en un estado conocido en caso de error
de actualización, se recomienda ejecutar el conjunto de instrucciones de actualización dentro de la
misma transacción.