Guía de desarrollo

Local Navigation

Crear y eliminar bases de datos SQLite

Puede crear bases de datos temporales o constantes.

Archivos de la base de datos SQLite

Cada base de datos SQLite se almacena en un solo archivo. Si especifica sólo el nombre de la base de datos como el valor de parámetro para DatabaseFactory.create(), el archivo de la base de datos se crea en el almacenamiento de la tarjeta de memoria externa. La ubicación predeterminada del archivo de base de datos es /SDCard/databases/application_name/. El nombre de la aplicación que crea la base de datos se incluye en la ruta predeterminada para evitar conflictos de nombres.

No es posible almacenar bases de datos SQLite en el almacenamiento de aplicaciones.

El almacenamiento de la tarjeta de memoria externa es la ubicación de almacenamiento de preferencia para las bases de datos si el dispositivo BlackBerry es compatible con ello. En dispositivos compatibles con el almacenamiento de la tarjeta de memoria externa, puede crear bases de datos en el almacenamiento de la tarjeta de memoria externa especificando la ruta /SDcard/.

Si la aplicación está diseñada para almacenar la base de datos SQLite en el almacenamiento multimedia integrado, debe implementar la aplicación de modo que sea fácil modificar el código para cambiar la ubicación de almacenamiento de la base de datos. En dispositivos compatibles con el almacenamiento multimedia integrado, puede crear bases de datos en el almacenamiento multimedia integrado especificando la ruta /store/.

Al desinstalar la aplicación, las bases de datos SQLite asociadas con la misma no se eliminan automáticamente.

Acerca de las claves principales

Cada fila de una tabla de SQLite se identifica exclusivamente por un ID de fila. El ID de fila es un entero con signo de 64 bits que identifica una fila de forma exclusiva. Se puede acceder al ID de fila mediante los nombres ROWID, OID, o _ROWID_ en lugar de con un nombre de columna, a menos que dichos nombres se utilicen explícitamente como nombres de columna. Si la tabla tiene una columna de tipo INTEGER PRIMARY KEY, entonces el nombre de esa columna es otro alias para el ID de fila.

Cuando una tabla puede tener inserciones simultáneas, debe asegurarse de que se devuelve el ID de fila correcto. Cuando utiliza executeInsert para ejecutar una instrucción INSERT, la sincronización se gestiona en código de origen y no hay ningún problema. Pero si ejecuta una instrucción INSERT mediante un método que no sea executeInsert, debe ejecutar la instrucción INSERT y realizar una llamada al método Database.lastInsertedRowID dentro de un bloque sincronizado. El bloque sincronizado debe impedir que otras instrucciones INSERT se ejecuten (y modifiquen el último ID de fila insertado).

Para recuperar los valores de entero y poder utilizarlos como claves en otra consulta, puede utilizar los métodos Statement.getIntegers y Statement.getLongs. Estos métodos simplifican y optimizan la recuperación de columnas de números enteros. Puede pensar en los valores de número entero recuperados como claves externas, salvo que no tienen que referirse a la clave principal de otra tabla.

SQLite crea automáticamente los índices para las columnas que cuentan con las restricciones UNIQUE o PRIMARY KEY.

Imposición de limitaciones de clave externas

Si utiliza claves externas en su base de datos, puede imponer su uso definiendo la opción foreign_key_constraints en la clase DatabaseOptions.

Puede definir la opción foreign_key_constraints al crear la base de datos. Sin embargo, para que las limitaciones de claves externas tengan efecto, deberá definir la opción cada vez que abra la base de datos. El siguiente ejemplo de código muestra cómo imponer las limitaciones de claves externas al abrir o crear una base de datos.

DatabaseOptions dbo = new DatabaseOptions();
dbo.set("foreign_key_constraints","on");
Database d = DatabaseFactory.openOrCreate("test.db", dbo);

Puede comprobar si las limitaciones de claves externas están activadas con el método DatabaseOptions.foreignKeyConstraintsOn.

Codificación de caracteres

Las bases de datos SQLite almacenan objetos String de forma interna en UTF-8, mientras que Java los almacena en UTF-16. La API de base de datos gestiona la conversión de String de forma interna, por lo que no es necesario que realice ninguna codificación ni conversión.

El pragma encoding SQLite no es compatible con la API de base de datos, por lo que no puede configurar otra codificación. Debe utilizar caracteres compatibles con UTF-8 en su base de datos SQLite.

Uso del intercalado de idiomas

Si su base de datos contiene datos textuales en otros idiomas que no sean el inglés, puede establecer el intercalado de idiomas para que SQLite clasifique las columnas y cree índices correctamente. Puede realizar esta acción mediante el operador COLLATE cuando crea una columna.

El intercalado predeterminado estándar ofrece buenos resultados para el uso normal del inglés, y también ofrece un orden correcto para los idiomas más utilizados. Podría no ofrecer buenos resultados para algunos idiomas latinos y sistemas ideográficos como el chino y el japonés.

Para obtener más información sobre cómo cambiar el intercalado predeterminado, consulte www.unicode.org.

El siguiente fragmento de código crea una tabla con el intercalado del idioma francés en una columna llamada a, teniendo en cuenta que la base de datos d está abierta.

d.executeStatement( "CREATE TABLE t1( a COLLATE french );" );

Los siguientes intercalados de idioma son compatibles con las aplicaciones de BlackBerry:

  • Estándar (predeterminado)

  • Afrikaans

  • Árabe

  • Catalán

  • Checo

  • Francés

  • Hebreo

  • Chino (Hong Kong)

  • Húngaro

  • Japonés

  • Coreano

  • Pinyin

  • Polaco

  • Rumano

  • Español

  • Tailandés

  • Turco

  • Chino (Taiwán)


¿Le ha resultado útil esta información? Envíenos sus comentarios.