Novità in questa versione

Local Navigation

Miglioramenti SQLite

Miglioramenti SQLite

BlackBerry Java SDK 7.0 utilizza SQLite versione 3.7.2. BlackBerry Java SDK 6.0 utilizzava SQLite 3.6.21. Per la descrizione delle nuove funzioni disponibili in SQLite, vedere la documentazione SQLite sul sito Web www.sqlite.org.

La quantità di RAM disponibile per un database SQLite per la memorizzazione delle strutture di dati interne per gli schemi e le transazioni è stata aumentata a 16 MB (da 5 MB nella versione 6.0). Ora, le dimensioni di una query possono raggiungere un massimo di 1 MB. In BlackBerry Java SDK 6.0, il limite di lunghezza delle query era 4 KB. Il limite dell'handle di file è stato aumentato a 64. Ciò consente di aprire fino a 56 database contemporaneamente in BlackBerry Java SDK 7.0.

Inoltre, è ora possibile scegliere di utilizzare un registro write-ahead al posto del journal di rollback. Il registro write-ahead aumenta la simultaneità delle operazioni poiché la scrittura sul database non blocca la lettura. È possibile utilizzare un registro write-ahead impostando l'opzione WAL nel pragma journal_mode. È possibile anche utilizzare la modalità cache condivisa per ridurre l'utilizzo della memoria nel caso di più connessioni contemporanee allo stesso database.

SQLite come servizio

SQLite funziona ora come servizio. Le operazioni del database utilizzano un collegamento runtime per trasferire i dati tra il codice JavaScript e il codice nativo. Sono stati aggiunti diversi metodi per utilizzare in modo efficiente il collegamento runtime.

Quando si crea una istruzione preparata per l'inserimento o l'aggiornamento dei dati, è possibile utilizzare Statement.executeInsert() e Statement.executeUpdate() per ridurre il numero di chiamate tramite il collegamento runtime. Questi metodi effettuano le operazioni seguenti nel codice nativo: associano i parametri SQL, eseguono l'istruzione, ripristinano l'istruzione e annullano le associazioni. Inoltre, executeInsert() restituisce l'ultimo ID riga inserito.

Quando si esegue una query che non restituisce risultati e non si associano i parametri, è possibile utilizzare Database.executeStatement() per ridurre le chiamate tramite il collegamento runtime. Questo metodo esegue le operazioni seguenti nel codice nativo: prepara, esegue e finalizza l'istruzione.

Quando si utilizza Statement.getCursor() per eseguire una query che restituisce risultati, è ora possibile preleggere un numero specificato di righe utilizzando Statement.setCursorBufferSize(). L'utilizzo di questo metodo riduce l'uso del collegamento runtime. Quando il cursore si sposta oltre l'insieme di dati nel buffer, viene preletto un nuovo batch di righe. È possibile recuperare il numero di righe che il cursore carica nel buffer con il nuovo metodo Statement.getCursorBufferSize().

Quando si recuperano numeri interi da utilizzare come chiavi in un'altra query, è possibile utilizzare Statement.getIntegers() e Statement.getLongs(). Questi metodi semplificano e ottimizzano il recupero delle colonne con dati di tipo numeri interi.

Funzionalità avanzata per la gestione dei BLOB

I nuovi metodi per la gestione dei BLOB eliminano la necessità di memorizzare l'intero BLOB nella memoria dell'applicazione. In questo modo, la quantità di memoria dinamica disponibile non limita la dimensione dei BLOB che possono essere letti o scritti dal database. Database.createBlobOutputStream() crea un oggetto OutputStream utilizzato per scrivere i dati in un BLOB; Database.createBlobInputStream() crea un oggetto InputStream utilizzato per leggere i dati da un BLOB.

Spazio riservato per i BLOB

Il metodo Statement.bindZeroBlob() consente di associare una serie di byte null a un parametro in un oggetto Statement. È possibile utilizzare il metodo bindZeroBlob per riservare spazio per l'output BLOB quando si utilizza Database.createBlobOutputStream() per scrivere dati in un BLOB ed eseguire il metodo Statement con Statement.execute().

Statistiche sull'utilizzo della memoria per le connessioni

È possibile tenere traccia dell'utilizzo della memoria per ogni connessione di database utilizzando i nuovi metodi Database.getCacheUsed(), Database.getSchemaUsed() e Database.getStatementUsed().

È possibile recuperare tipi di colonna SQLite per le righe specificate utilizzando il nuovo metodo Row.getDatabaseColumnTypes().

Supporto pragma

È ora possibile utilizzare un sottoinsieme di istruzioni SQLite PRAGMA. La classe net.rim.device.api.database.Pragma prevede costanti per ogni tipo di pragma supportato. Sono supportati i seguenti pragma:

  • collation_list

  • compile_options

  • database_list

  • foreign_keys

  • freelist_count

  • journal_mode

  • journal_size_limit

  • page_count

  • synchronous

  • user_version

Aggiunta o rimozione dei database

È possibile aggiungere e rimuovere i database da una connessione di database esistente. A tale scopo, sono stati aggiunti due nuovi metodi, Database.attach() e Database.detach(). Questi metodi consento di aggiungere fino a dieci database a una connessione. È possibile utilizzare anche il comando DETACH in una istruzione SQL, ma non è possibile utilizzare il comando ATTACH.

Confronto lingue

È ora supportato il confronto tra le lingue. Ad esempio, è ora possibile creare una tabella con il confronto della lingua francese attivato in una colonna. Sono supportate le sequenze di confronto seguenti:

  • Standard
  • Afrikaans
  • Arabo
  • Catalano
  • Ceco
  • Francese
  • Ebraico
  • Cinese (Hong Kong)
  • Ungherese
  • Giapponese
  • Coreano
  • Pinyin
  • Polacco
  • Rumeno
  • Spagnolo
  • Tailandese
  • Turco
  • Cinese (Taiwan)

Modifiche di comportamento dei cursori del buffer

Il metodo BufferedCursor.isEmpty() non si sposta più tramite il cursore in nessuna circostanza e non restituisce più l'oggetto false se il cursore supera l'ultima riga disponibile.

Il metodo BufferedCursor.prev() ripristina il cursore sulla posizione iniziale (-1) quando viene richiamato più volte.

Commenti e suggerimenti

Per fornire commenti su questo prodotto, visitare il sito www.blackberry.com/docsfeedback.

Argomento successivo: Note legali
Argomento precedente: Protezione NFC

Le informazioni sono state utili? Inviateci i vostri commenti.