Entwicklungshandbuch

Local Navigation

Erstellen und Löschen von SQLite-Datenbanken

Sie können temporäre oder permanente Datenbanken erstellen.

SQLite-Datenbankdateien

Jede SQLite-Datenbank wird in einer einzelnen Datei gespeichert. Wenn Sie nur den Datenbanknamen als Parameterwert für DatabaseFactory.create() festlegen, wird die Datenbankdatei im externen Medienkartenspeicher erstellt. Der Standardspeicherort für die Datenbankdatei ist /SDCard/databases/application_name/. Der Name der Anwendung, von der die Datenbank erstellt wird, ist im Standardpfad enthalten, um Namenskonflikte zu vermeiden.

Sie können SQLite-Datenbanken nicht im Anwendungsspeicher speichern.

Externer Medienkartenspeicher ist der bevorzugte Speicherort für Datenbanken, wenn das BlackBerry-Gerät solche Speicher unterstützt. Auf Geräten, die externen Medienkartenspeicher unterstützen, können Sie Datenbanken im externen Medienkartenspeicher durch Angeben des Pfads /SDcard/ erstellen.

Wenn Ihre Anwendung Ihre SQLite-Datenbank im internen Medienspeicher speichern soll, sollten Sie Ihre Anwendung so implementieren, dass sich der Code problemlos ändern lässt, um den Speicherort der Datenbank zu ändern. Auf Geräten, die integrierten Medienspeicher unterstützen, können Sie Datenbanken im integrierten Medienspeicher durch Angeben des Pfads /store/ erstellen.

Wenn Ihre Anwendung deinstalliert wird, werden die damit verknüpften SQLite-Datenbanken nicht automatisch entfernt.

Informationen zu Primärschlüsseln

Jede Zeile in einer SQLite-Tabelle ist mit einer eindeutigen Zeilen-ID gekennzeichnet. Die Zeilen-ID ist eine signierte 64-Bit-Ganzzahl, die die Zeile eindeutig kennzeichnet. Auf die Zeilen-ID kann über die Namen ROWID, OID oder _ROWID_ statt eines Spaltennamens zugegriffen werden, sofern diese Namen nicht als explizit deklarierte Spaltennamen verwendet werden. Wenn die Tabelle eine Spalte des Typs INTEGER PRIMARY KEY besitzt, ist der Name dieser Spalte ein weiteres Alias für die Zeilen-ID.

Wenn bei einer Tabelle gleichzeitige Einfügungen auftreten, müssen Sie sicherstellen, dass die richtige Zeilen-ID zurückgegeben wird. Wenn Sie executeInsert verwenden, um eine INSERT-Anweisung auszuführen, wird die Synchronisierung in systemeigenem Code durchgeführt, und es gibt kein Problem. Wenn Sie eine INSERT-Anweisung aber mithilfe einer anderen Methode als executeInsert ausführen, sollten Sie die INSERT-Anweisung ausführen und innerhalb eines synchronisierten Blocks einen Aufruf an die Database.lastInsertedRowID-Methode tätigen. Der synchronisierte Block sollte verhindern, dass andere INSERT-Anweisungen ausgeführt werden (und die zuletzt eingefügte Zeilen-ID ändern).

Um Ganzzahlwerte abzurufen, die als Schlüssel in einer anderen Abfrage verwendet werden sollen, können Sie die Methoden Statement.getIntegers und Statement.getLongs verwenden. Diese Methoden vereinfachen und optimieren das Abrufen von Ganzzahlspalten. Sie können sich die abgerufenen Ganzzahlwerte als Fremdschlüssel vorstellen, außer dass sie nicht auf den Primärschlüssel einer anderen Tabelle verweisen müssen.

SQLite erstellt automatisch Indizes für Spalten, die die Einschränkung UNIQUE oder PRIMARY KEY aufweisen.

Erzwingen von Fremdschlüssel-Beschränkungen

Wenn Sie in Ihrer Datenbank Fremdschlüssel verwenden, können Sie ihre Verwendung durch Festlegen der foreign_key_constraints-Option in der DatabaseOptions-Klasse erzwingen.

Sie können die foreign_key_constraints-Option festlegen, wenn Sie die Datenbank erstellen. Damit die Fremdschlüssel-Beschränkungen aktiv sind, müssen Sie die Option allerdings jedes Mal beim Öffnen der Datenbank festlegen. Das folgende Codebeispiel zeigt, wie Sie eine Beschränkung für Fremdschlüssel beim Öffnen oder Erstellen einer Datenbank erzwingen.

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

Sie können mit der DatabaseOptions.foreignKeyConstraintsOn-Methode prüfen, ob Fremdschlüssel-Beschränkungen aktiviert sind.

Zeichenverschlüsselung

SQLite-Datenbanken speichern Zeichenfolgen intern in UTF-8, während Java sie als UTF-16 speichert. Die Datenbank-API führt die Konvertierung von Zeichenfolgen intern durch. Daher brauchen Sie keine Verschlüsselung oder Konvertierung durchzuführen.

Das SQLite-encoding-Pragma wird nicht in der Datenbank-API unterstützt. Daher können Sie keine andere Verschlüsselung festlegen. Sie müssen UTF-8- unterstützte Zeichen in Ihrer SQLite-Datenbank verwenden.

Verwenden von Sprachsortierungen

Wenn Ihre Datenbank Textdaten in anderen Sprachen als Englisch enthält, können Sie die Sprachsortierung festlegen, sodass SQLite Spalten richtig sortiert und die Indizierung richtig durchführt. Dies ist auch mit dem COLLATE-Operator möglich, wenn Sie die Spalte erstellen.

Die Standardsortierung erzielt bei normaler Verwendung gute Ergebnisse für Englisch und bietet auch eine korrekte Anordnung für viele andere gebräuchliche Sprachen. Sie erzielt möglicherweise keine korrekten Ergebnisse für einige lateinische Sprachen sowie für ideografische Schriften wie z. B. Chinesisch und Japanisch.

Weitere Informationen zum Ändern der Standardsortierung finden Sie auf www.unicode.org.

Der folgende Codeausschnitt erstellt eine Tabelle, bei der für eine Spalte namens a die französische Sprachsortierung aktiviert ist, sofern die Datenbank d geöffnet ist.

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

Die folgenden Sprachsortierungen werden in BlackBerry-Anwendungen unterstützt:

  • Standard

  • Afrikaans

  • Arabisch

  • Katalanisch

  • Tschechisch

  • Französisch

  • Hebräisch

  • Chinesisch (Hongkong)

  • Ungarisch

  • Japanisch

  • Koreanisch

  • Pinyin

  • Polnisch

  • Rumänisch

  • Spanisch

  • Thailändisch

  • Türkisch

  • Chinesisch (Taiwan)


Waren diese Informationen hilfreich? Senden Sie uns Ihren Kommentar.