Neu in dieser Version

Local Navigation

SQLite-Verbesserungen

SQLite-Verbesserungen

BlackBerry Java SDK 7.0 verwendet SQLite 3.7.2. BlackBerry Java SDK 6.0 verwendete SQLite 3.6.21. Eine Beschreibung der neuen Funktionen in SQLite finden Sie in der SQLite-Dokumentation, die auf www.sqlite.org verfügbar ist.

Der Größe des RAM, der für eine SQLite-Datenbank zur Speicherung interner Datenstrukturen für Schemas und Transaktionen verfügbar ist, wurde auf 16 MB erhöht (von 5 MB in Version 6.0). Eine Abfrage kann jetzt bis zu 1 MB groß sein. In BlackBerry Java SDK 6.0 war die Abfragenlänge auf 4 KB beschränkt. Die Beschränkung für Dateihandles wurde auf 64 erhöht, sodass Sie in BlackBerry Java SDK 7.0 bis zu 56 Datenbanken gleichzeitig öffnen können.

Außerdem können Sie jetzt ein Write-Ahead-Protokoll statt des Rollback-Journal verwenden. Das Write-Ahead-Protokoll bietet eine verbesserte Gleichzeitigkeit, weil das Schreiben in der Datenbank nicht das Lesen blockiert. Sie können ein Write-Ahead-Protokoll verwenden, indem Sie die WAL-Option im journal_mode-Pragma festlegen. Sie können auch den Modus für einen gemeinsam genutzten Cache verwenden, um die Speicherauslastung bei mehreren Verbindungen mit derselben Datenbank zu verringern.

SQLite als Dienst

SQLite wird jetzt als Dienst ausgeführt, und Datenbankoperationen verwenden eine Laufzeitbrücke, um Daten zwischen JavaScript-Code und systemeigenem Code zu übertragen. Es wurden mehrere Methoden hinzugefügt, um Ihnen zu helfen, die Laufzeitbrücke effizient zu verwenden.

Wenn Sie eine vorbereitete Anweisung zum Einfügen oder Aktualisieren von Daten erstellen, können Sie Statement.executeInsert() und Statement.executeUpdate() verwenden, um die Anzahl von Aufrufen über die Laufzeitbrücke zu verringern. Diese Methoden führen die folgenden Operationen in systemeigenem Code aus: Binden von SQL-Parametern, Ausführen der Anweisung, Zurücksetzen der Anweisung und Löschen von Bindungen. Außerdem gibt executeInsert() die letzte eingefügte Zeilen-ID zurück.

Wenn Sie eine Abfrage ausführen, die keinen Ergebnissatz zurückgibt, und Sie keine Parameter binden, können Sie Database.executeStatement() verwenden, um Aufrufe über die Laufzeitbrücke zu verringern. Diese Methode führt die folgenden Operationen in systemeigenem Code aus: Vorbereiten der Anweisung, Ausführen der Anweisung und Abschließen der Anweisung.

Beim Verwenden von Statement.getCursor() zum Ausführen einer Abfrage, die Ergebnissätze zurückgibt, können Sie jetzt mithilfe von Statement.setCursorBufferSize() im Voraus eine festgelegte Anzahl von Zeilen abrufen. Das Verwenden dieser Methode verringert die Verwendung der Laufzeitbrücke. Wenn sich der Cursor über den gepufferten Satz hinaus bewegt, wird ein neuer Zeilenstapel abgerufen. Sie können mit der neuen Methode Statement.getCursorBufferSize() die Anzahl der Zeilen abrufen, die ein Cursor puffert.

Wenn Sie Ganzzahlwerte abrufen, die als Schlüssel in einer anderen Abfrage verwendet werden sollen, können Sie Statement.getIntegers() und Statement.getLongs() verwenden. Diese Methoden helfen Ihnen, das Abrufen von Ganzzahlspalten zu vereinfachen und zu optimieren.

Verbesserte Funktionalität für das Behandeln von BLOBs

Neue Methoden für das Behandeln von BLOBs beseitigen die Notwendigkeit, das gesamte BLOB im Anwendungsspeicher zu speichern. Deshalb begrenzt die Größe des verfügbaren dynamischen Speichers nicht die BLOB-Größe, die in die Datenbank geschrieben oder aus ihr gelesen werden kann. Database.createBlobOutputStream() erstellt ein OutputStream-Objekt, das verwendet wird, um Daten in ein BLOB zu schreiben, und Database.createBlobInputStream() erstellt ein InputStream-Objekt, das verwendet wird, um Daten aus einem BLOB zu lesen.

Reservieren von Speicherplatz für BLOBs

Die Statement.bindZeroBlob()-Methode ermöglicht Ihnen, eine Reihe von Null-Bytes an einen Parameter in einem Statement zu binden. Sie können die bindZeroBlob-Methode verwenden, um Speicherplatz für die BLOB-Ausgabe zu reservieren, wenn Sie Database.createBlobOutputStream() verwenden, um Daten in ein BLOB zu schreiben, und Statement mit Statement.execute() ausführen.

Statistik der Verbindungsspeicherauslastung

Sie können mithilfe der neuen Methoden Database.getCacheUsed(), Database.getSchemaUsed() und Database.getStatementUsed() die Speicherauslastung für jede Datenbankverbindung nachverfolgen.

Sie können SQLite-Spaltentypen für festgelegte Zeilen mithilfe der neue Methode Row.getDatabaseColumnTypes() abrufen.

Pragma-Unterstützung

Sie können jetzt einen Teil der SQLite-PRAGMA-Anweisungen verwenden. Die net.rim.device.api.database.Pragma-Klasse enthält Konstanten für jedes unterstützte Pragma. Die folgenden Pragmas werden unterstützt:

  • collation_list

  • compile_options

  • database_list

  • foreign_keys

  • freelist_count

  • journal_mode

  • journal_size_limit

  • page_count

  • synchronous

  • user_version

Anfügen und Trennen von Datenbanken

Sie können Datenbanken an eine vorhandene Datenbankverbindung anfügen oder von einer solchen trennen. Es wurden zwei neue Methoden hinzugefügt, Database.attach() und Database.detach(). Diese Methoden wurden dafür entworfen, Ihnen zu ermöglichen, bis zu zehn Datenbanken an eine Verbindung anzufügen. Sie können auch den DETACH-Befehl in einer SQL-Anweisung verwenden, nicht jedoch den ATTACH-Befehl.

Sprachensortierung

Sprachensortierung wird jetzt unterstützt. Zum Beispiel können Sie jetzt eine Tabelle erstellen, in der für eine Spalte eine französische Sprachensortierung aktiviert ist. Die folgenden Sortierungssequenzen werden 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)

Verhaltensänderungen für gepufferte Cursors

Die BufferedCursor.isEmpty()-Methode bewegt sich unter keinen Umständen mehr durch den Cursor und gibt nicht mehr "false" zurück, wenn der Wert der Cursor-Position um eins höher als die letzte verfügbare Zeile ist.

Die BufferedCursor.prev()-Methode platziert den Cursor wieder an der anfänglichen Position (-1), wenn sie mehrmals aufgerufen wird.

Rückmeldung

Falls Sie uns eine Rückmeldung zu diesem Artikel zukommen lassen möchten, besuchen Sie die Website www.blackberry.com/docsfeedback.

Nächstes Thema: Rechtliche Hinweise
Vorheriges Thema: Sicherheit für NFC

Waren diese Informationen hilfreich? Senden Sie uns Ihren Kommentar.