Guida allo sviluppo

Local Navigation

Creazione ed eliminazione di database SQLite

È possibile creare database temporanei o permanenti.

File del database SQLite

Ogni database SQLite viene archiviato in un unico file. Se si specifica solo il nome del database come valore di parametro per DatabaseFactory.create(), il file di database viene creato in una scheda di memoria esterna. La posizione predefinita per il file del database è /SDCard/databases/application_name/. Il nome dell'applicazione che crea il database è incluso nel percorso predefinito per evitare conflitti di nomi.

Non è possibile memorizzare i database SQLite nella memoria applicazione.

L'archiviazione su una scheda di memoria esterna è la posizione di memorizzazione preferita per i database se il dispositivo BlackBerry la supporta. Sui dispositivi che supportano la memoria scheda di memoria esterna, è possibile creare database nella memoria scheda di memoria esterna specificando il percorso /SDcard/.

Se l'applicazione è progettata per l'archiviazione del database SQLite nella memoria contenuto multimediale integrata, è necessario implementare l'applicazione in modo che sia semplice modificare il codice per poter cambiare la posizione di memorizzazione del database. Sui dispositivi che supportano la memoria contenuto multimediale integrata, è possibile creare database nella memoria contenuto multimediale integrata specificando il percorso /store/.

Quando l'applicazione viene disinstallata, i database SQLite associati non vengono rimossi automaticamente.

Informazioni sulle chiavi primarie

Ciascuna riga in una tabella SQLite è identificata univocamente tramite un ID della riga. L'ID della riga è un intero con firma a 64 bit, che consente di identificare univocamente la riga. È possibile accedere all'ID della riga tramite i nomi ROWID, OID o _ROWID_ in sostituzione di un nome della colonna, a meno che tali nomi siano utilizzati in maniera esplicita come nomi di colonna. Se nella tabella è presente una colonna di tipo INTEGER PRIMARY KEY, il nome di tale colonna è un altro alias per l'ID della riga.

Se per una tabella è prevista la possibilità di inserimenti simultanei, è necessario assicurarsi che venga restituito l'ID della riga corretto. Quando si utilizza executeInsert per l'esecuzione di un'istruzione INSERT, la sincronizzazione viene gestita nel codice nativo e non si verificano problemi. In caso contrario, se viene eseguita un'istruzione INSERT utilizzando un metodo diverso da executeInsert, è necessario eseguire l'istruzione INSERT ed effettuare una chiamata al metodo Database.lastInsertedRowID all'interno di un blocco sincronizzato. Il blocco sincronizzato dovrebbe impedire l'esecuzione di altre istruzioni INSERT (nonché la modifica dell'ultimo ID della riga inserito).

Per recuperare i valori interi da utilizzare come chiavi in un'altra query, è possibile utilizzare i metodi Statement.getIntegers e Statement.getLongs. Questi metodi consentono di semplificare e ottimizzare il recupero delle colonne degli interi. È possibile considerare i valori interi recuperati come chiavi esterne, tranne per il fatto che non devono fare riferimento alla chiave primaria di un'altra tabella.

SQLite crea automaticamente gli indici per le colonne dotate di vincoli UNIQUE o PRIMARY KEY.

Imposizione di vincoli di chiave esterna

Se si utilizzano chiavi esterne nel database, è possibile imporre il loro utilizzo impostando l'opzione foreign_key_constraints nella classe DatabaseOptions.

È possibile impostare l'opzione foreign_key_constraints al momento della creazione del database. Tuttavia, per applicare i vincoli di chiave esterna, è necessario anche impostare l'opzione ogni volta che si apre il database. Nell'esempio di codice seguente, viene mostrato come imporre l'utilizzo dei vincoli di chiave esterna al momento dell'apertura o della creazione di un database.

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

È possibile controllare se i vincoli di chiave esterna siano attivati utilizzando il metodo DatabaseOptions.foreignKeyConstraintsOn.

Codifica caratteri

I database SQLite memorizzano le stringhe all'interno di UTF-8, mentre Java le memorizza come UTF-16. L'API Database gestisce la conversione di stringhe all'interno, pertanto non è necessario eseguire alcuna codifica o conversione.

Il pragma encoding SQLite non è supportato nell'API Database, pertanto non è possibile impostare un'altra codifica. È necessario utilizzare caratteri supportati da UTF-8 nel database SQLite.

Uso dei confronti tra lingue

Quando il database in uso contiene dati in formato testuale in lingue diverse dall'inglese, è possibile impostare il confronto tra lingue, in modo che SQLite ordini le colonne ed esegua l'indicizzazione in modo corretto. È possibile eseguire questa procedura mediante l'operatore COLLATE al momento della creazione della colonna.

La funzione di confronto Standard predefinita offre buoni risultati per l'inglese nell'utilizzo normale e fornisce altresì l'ordinamento corretto per molte altre lingue di uso comune. Potrebbe non essere in grado di fornire risultati corretti per alcune lingue latine e per gli script ideografici, come il cinese e il giapponese.

Per ulteriori informazioni sulla modifica della funzione di confronto predefinita, visitare il sito www.unicode.org.

Nel frammento di codice seguente, viene creata una tabella con un confronto della lingua francese attivato in una colonna denominata a, presupponendo che il database d sia aperto.

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

Nelle applicazioni BlackBerry sono supportati i seguenti confornti tra lingue:

  • Standard (impostazione predefinita)

  • Afrikaans

  • Arabo

  • Catalano

  • Ceco

  • Francese

  • Ebraico

  • Cinese (Hong Kong)

  • Ungherese

  • Giapponese

  • Coreano

  • Pinyin

  • Polacco

  • Rumeno

  • Spagnolo

  • Tailandese

  • Turco

  • Cinese (Taiwan)

Argomento successivo: Creazione di un database SQLite

Le informazioni sono state utili? Inviateci i vostri commenti.