Novidades desta versão

Local Navigation

Aprimoramentos do SQLite

Aprimoramentos do SQLite

O BlackBerry Java SDK 7.0 usa o SQLite versão 3.7.2. O BlackBerry Java SDK 6.0 usou o SQLite 3.6.21. Para uma descrição dos novos recursos do SQLite, consulte a documentação do SQLite disponível em www.sqlite.org.

A quantidade de RAM disponível a um banco de dados do SQLite para armazenamento de estrutura de dados internos para esquemas e transações aumentou para 16 MB (de 5 MB em 6.0). A partir de agora, uma consulta pode ter até 1 MB. No BlackBerry Java SDK 6.0, o limite da consulta era de 4 KB. O limite de manuseio do arquivo aumentou para 64, permitindo que você abra até 56 bancos de dados ao mesmo tempo no BlackBerry Java SDK 7.0.

Além disso, você pode optar por usar um log write-ahead em vez do diário de reversão. O log de write-ahead fornece simultaneidade aumentada, pois a gravação no banco de dados não bloqueia a leitura. Você pode usar um log de write-ahead ao definir a opção WAL no pragma journal_mode. Você também pode usar o modo de cache compartilhado para ajudar a reduzir o uso de memória para diversas conexões para o mesmo banco de dados.

SQLite como um serviço

A partir de agora, o SQLite executa um serviço, e as operações de bancos de dados usam uma ponte de tempo de execução para transferir dados entre códigos JavaScript e códigos nativos. Diversos métodos foram adicionados para ajudá-lo a usar a ponte de tempo de execução com eficácia.

Ao criar uma declaração preparada para inserção ou atualização de dados, é possível usar Statement.executeInsert() e Statement.executeUpdate() para reduzir o número de chamadas pela ponte de tempo de execução. Estes métodos executam as seguintes operações no código nativo: vinculação de parâmetros de SQL, execução da declaração, reinicialização da declaração e limpeza de vínculos. Além disso, executeInsert() retorna o último ID inserido na linha.

Ao executar uma consulta que não retornar um conjunto de resultados, e se você estiver tentando vincular parâmetros, é possível usar Database.executeStatement() para reduzir chamadas por meio de uma ponte de tempo de execução. Este método executa as seguintes operações no código nativo: preparação, execução e finalização de declaração.

Ao usar Statement.getCursor() para executar uma consulta que retorna conjuntos de resultados, é possível realizar uma pré-busca por um número específico de filas usando Statement.setCursorBufferSize(). O uso deste método reduz a utilização da ponte de tempo de execução. Quando o cursor passa pelo conjunto em buffer, um novo lote de filas é buscado. Você pode recuperar um número de filas que um cursor realiza buffer com o novo método Statement.getCursorBufferSize().

Quando você recuperar valores de números inteiros para usar como chaves em outra consulta, é possível usar Statement.getIntegers() e Statement.getLongs(). Estes métodos ajudam a simplificar e a otimizar a recuperação de colunas de números inteiros.

Funcionalidade melhorada para manuseio de blobs

Novos métodos para manusear blobs eliminam a necessidade de armazenamento do blob completo na memória de um aplicativo, assim a quantidade de memória dinâmica disponível não limita o tamanho do blob que pode ser lido no banco de dados ou gravado a partir dele. Database.createBlobOutputStream() cria um objeto OutputStream usado para gravar dados em um blob, e Database.createBlobInputStream() cria um objeto InputStream usado para ler dados a partir de um blob.

Reservar espaço para BLOBs

O método Statement.bindZeroBlob() permite você unir uma série de bytes inválidos a um parâmetro em um Statement. Você pode usar o método bindZeroBlob para reservar espaço para saída de BLOB quando você usa Database.createBlobOutputStream() para gravar dados em um BLOB e executa o Statement com Statement.execute().

Estatísticas de uso de memória de conexão

Você pode controlar o uso de memória para cada conexão de banco de dados usando os novos métodos Database.getCacheUsed(), Database.getSchemaUsed() e Database.getStatementUsed().

Você pode recuperar tipos de coluna de SQLite para especificações por linha usando o novo método Row.getDatabaseColumnTypes().

Suporte a Pragma

Você agora pode usar um subconjunto de declarações SQLite de PRAGMA. A classe net.rim.device.api.database.Pragma contém constantes para cada pragma suportado. As seguintes configurações têm suporte:

  • collation_list

  • compile_options

  • database_list

  • foreign_keys

  • freelist_count

  • journal_mode

  • journal_size_limit

  • page_count

  • synchronous

  • user_version

Anexar e separar bancos de dados

Você pode anexar e separar bancos de dados de uma conexão existente de banco de dados, dois novos métodos foram adicionados: Database.attach() e Database.detach(). Estes métodos são projetados permitir você anexar até dez bancos de dados para uma conexão. Você também pode usar o comando DETACH em uma declaração de SQL, mas você não pode usar o comando ATTACH.

Agrupamento de idioma

O agrupamento de idioma agora é suportado. Por exemplo, você pode criar uma tabela com o agrupamento do idioma francês habilitado em uma coluna. As seguintes sequências de agrupamento são suportadas:

  • Padrão
  • Africâner
  • Árabe
  • Catalão
  • Tcheco
  • Francês
  • Hebraico
  • Chinês (Hong Kong)
  • Húngaro
  • Japonês
  • Coreano
  • Pinyin
  • Polonês
  • Romeno
  • Espanhol
  • Tailandês
  • Turco
  • Chinês (Taiwan)

O comportamento é alterado para cursores armazenados em buffer

O método BufferedCursor.isEmpty() não move mais o cursor e não retrona mais false quando a posição do cursor é uma além da última linha disponível.

O método BufferedCursor.prev() reposiciona o cursor à posição inicial (-1) quando é chamado múltiplas vezes.

Enviar comentários

Para enviar comentários sobre este material, visite www.blackberry.com/docsfeedback.

Próximo tópico: Aviso legal
Tópico anterior: Segurança do NFC

Estas informações foram úteis? Gostaríamos de receber seus comentários.