Novedades de esta versión

Local Navigation

Mejoras de SQLite

Mejoras de SQLite

El BlackBerry Java SDK 7.0 usa SQLite versión 3.7.2. BlackBerry Java SDK 6.0 usaba SQLite 3.6.21. Para una descripción de las características nuevas en SQLite, consulte la documentación de SQLite, disponible en www.sqlite.org.

La cantidad de RAM disponible en una base de datos de SQLite para almacenar las estructuras internas de datos para esquemas y transacciones ha aumentado a 16 MB (de 5 MB en 6.0). Una consulta ahora puede pesar hasta 1 MB. En BlackBerry Java SDK 6.0, el límite de longitud de consulta era 4 KB. El límite de manipulación de archivos ha aumentado a 64, permitiendo abrir hasta 56 bases de datos al mismo tiempo en BlackBerry Java SDK 7.0.

Además, ahora puede elegir utilizar un registro de escritura anticipada en vez del diario de reversión. El registro de escritura anticipada ofrece mayor simultaneidad porque la escritura en la base de datos no bloquea la lectura. Puede utilizar un registro de escritura anticipada configurando la opción WAL en el PRAGMA journal_mode. También puede utilizar el modo de caché compartida para ayudar a reducir el uso de memoria para múltiples conexiones a la misma base de datos.

SQLite como servicio

SQLite ahora se ejecuta como servicio, y las operaciones de la base de datos utilizan un puente del tiempo de ejecución para transferir los datos entre código JavaScript y código nativo. Se han agregado varios métodos para ayudarle a utilizar el puente del tiempo de ejecución eficazmente.

Cuando crea una declaración preparada para insertar o actualizar los datos, puede utilizar Statement.executeInsert() y Statement.executeUpdate() para reducir el número de llamadas por el puente del tiempo de ejecución. Estos métodos realizan las operaciones siguientes en el código nativo: enlazar los parámetros del SQL, ejecutar la declaración, restablecer la declaración y desactivar los enlaces. Además, executeInsert() devuelve la última fila de identificador insertada.

Cuando ejecuta una consulta que no devuelve un conjunto de resultados y no está enlazando parámetros, puede utilizar Database.executeStatement() para reducir las llamadas por el puente del tiempo de ejecución. Este método realiza las operaciones siguientes en el código nativo: preparar la declaración, ejecutar la declaración y completar la declaración.

Cuando mediante Statement.getCursor() ejecute una consulta que devuelva un conjunto de resultados, ahora puede obtener previamente un número especificado de filas mediante Statement.setCursorBufferSize(). Mediante este método se reduce el uso del puente del tiempo de ejecución. Cuando el cursor se desplaza por delante del conjunto almacenado en búfer, se obtiene una serie nueva de filas. Puede recuperar el número de filas que almacena en búfer un cursor con el método nuevo Statement.getCursorBufferSize().

Cuando recupera valores de número entero para utilizar como claves en otra consulta, puede utilizar Statement.getIntegers() y Statement.getLongs(). Estos métodos ayudan a simplificar y optimizar la recuperación de columnas de número entero.

Funcionalidad mejorada para administrar BLOB

Los métodos nuevos para administrar BLOB eliminan la necesidad de almacenar el BLOB entero en la memoria de aplicación, de modo que la cantidad de la memoria dinámica disponible no limita el tamaño de BLOB que puede leerse o escribrise en la base de datos. Database.createBlobOutputStream() crea un objeto OutputStream que se usa para escribir los datos en un BLOB, y crea Database.createBlobInputStream() un objeto InputStream que se usa para leer los datos de un BLOB.

Reservar espacio para BLOB

El método Statement.bindZeroBlob() le permite enlazar una serie de bytes nulos a un parámetro en un Statement. Puede utilizar el método bindZeroBlob para reservar el espacio para la salida de BLOB cuando utilice Database.createBlobOutputStream() para escribir los datos en un BLOB y ejecutar el Statement con Statement.execute().

Estadísticas de uso de memoria de conexión

Puede hacer un seguimiento del uso de la memoria para cada conexión de base de datos mediante los métodos nuevos Database.getCacheUsed(), Database.getSchemaUsed()y Database.getStatementUsed().

Puede recuperar tipos de columna SQLite para filas específicas mediante el método nuevo Row.getDatabaseColumnTypes().

Asistencia técnica

Ahora puede utilizar un subconjunto de declaraciones de PRAGMA de SQLite. La clase net.rim.device.api.database.Pragma contiene constantes para cada PRAGMA admitida. Se admiten las siguientes PRAGMA:

  • collation_list

  • compile_options

  • database_list

  • foreign_keys

  • freelist_count

  • journal_mode

  • journal_size_limit

  • page_count

  • synchronous

  • user_version

Adjuntar y separar las bases de datos

Puede adjuntar las bases de datos y separar las bases de datos de una conexión de base de datos existente, se han agregado dos métodos nuevos, Database.attach() y Database.detach(). Estos métodos están diseñados para permitirle adjuntar hasta diez bases de datos a una conexión. También puede utilizar el comando DETACH en una instrucción de SQL, pero no usar el comando ATTACH.

Intercalado de idioma

Ahora se admite el intercalado de idioma. Por ejemplo, ahora puede crear una tabla que tenga habilitado el intercalado de francés. Las siguientes secuencias de intercalado están admitidas:

  • Estándar
  • Afrikaans
  • Árabe
  • Catalán
  • Checo
  • Francés
  • Hebreo
  • Chino de Hong Kong
  • Húngaro
  • Japonés
  • Coreano
  • Pinyin
  • Polaco
  • Rumano
  • Español
  • Tailandés
  • Turco
  • Chino taiwanés

Cambios de comportamiento para cursores almacenados en búfer

El método BufferedCursor.isEmpty() ya no se desplaza con el cursor en ningún caso, y ya no devuelve false cuando la posición de cursor es una más que la última fila disponible.

El método BufferedCursor.prev() recoloca el cursor en la posición inicial (-1) cuando se le invoca muchas veces.

Comentarios

Para ofrecer comentarios acerca de esta entrega, visite www.blackberry.com/docsfeedback.

Tema siguiente: Aviso legal
Tema anterior: Seguridad para NFC

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