Qt Quick Local Storage QML Types
Dies ist ein Singleton-Typ zum Lesen und Schreiben in SQLite-Datenbanken.
Methoden
- Objekt openDatabaseSync(string name, string version, string description, int estimated_size, jsobject callback(db))
Detaillierte Beschreibung
Um die Typen in diesem Modul zu verwenden, importieren Sie das Modul und rufen die entsprechenden Funktionen über den Typ LocalStorage
auf:
import QtQuick import QtQuick.LocalStorage Item { Component.onCompleted: { var db = LocalStorage.openDatabaseSync(...) } }
Diese Datenbanken sind benutzerspezifisch und QML-spezifisch, aber für alle QML-Anwendungen zugänglich. Sie sind im Unterverzeichnis Databases
von QQmlEngine::offlineStoragePath() gespeichert, derzeit als SQLite-Datenbanken.
Die Datenbankverbindungen werden bei der Garbage Collection von Javascript automatisch geschlossen.
Die API kann von JavaScript-Funktionen in Ihrer QML verwendet werden:
import QtQuick Rectangle { color: "white" width: 200 height: 100 Text { text: "?" anchors.horizontalCenter: parent.horizontalCenter function findGreetings() { var db = openDatabaseSync("QDeclarativeExampleDB", "1.0", "The Example QML SQL!", 1000000); db.transaction( function(tx) { // Create the database if it doesn't already exist tx.executeSql('CREATE TABLE IF NOT EXISTS Greeting(salutation TEXT, salutee TEXT)'); // Add (another) greeting row tx.executeSql('INSERT INTO Greeting VALUES(?, ?)', [ 'hello', 'world' ]); // Show all added greetings var rs = tx.executeSql('SELECT * FROM Greeting'); var r = "" for (var i = 0; i < rs.rows.length; i++) { r += rs.rows.item(i).salutation + ", " + rs.rows.item(i).salutee + "\n" } text = r } ) } Component.onCompleted: findGreetings() } }
Die API entspricht der Synchronous API of the HTML5 Web Database API, W3C Working Draft 29 October 2009.
Das SQL Local Storage Beispiel demonstriert die Grundlagen der Verwendung der Offline Storage API.
Öffnen oder Erstellen einer Datenbank
import QtQuick.LocalStorage as Sql db = Sql.openDatabaseSync(identifier, version, description, estimated_size, callback(db))
Der obige Code gibt die durch identifier identifizierte Datenbank zurück. Wenn die Datenbank noch nicht existiert, wird sie erstellt und die Funktion callback mit der Datenbank als Parameter aufgerufen. identifier ist der Name der physischen Datei (mit oder ohne relativen Pfad), die die Datenbank enthält. description und estimated_size werden in die INI-Datei geschrieben (siehe unten), sind aber derzeit unbenutzt.
Kann eine Ausnahme mit der Code-Eigenschaft SQLException.DATABASE_ERR oder SQLException.VERSION_ERR auslösen.
Wenn eine Datenbank zum ersten Mal erstellt wird, wird auch eine INI-Datei erstellt, die die Eigenschaften der Datenbank angibt:
Schlüssel | Wert |
---|---|
Bezeichner | Der Name der Datenbank, der an openDatabase() |
Version | Die Version der Datenbank, die an openDatabase() |
Beschreibung | Die Beschreibung der Datenbank, die an openDatabase() |
GeschätzteGröße | Die geschätzte Größe (in Bytes) der Datenbank, die an openDatabase() |
Treiber | Derzeit "QSQLITE" |
Diese Daten können von Anwendungstools verwendet werden.
db.changeVersion(from, to, callback(tx))
Mit dieser Methode können Sie ein Scheme Upgrade durchführen. Wenn sie erfolgreich ist, gibt sie ein neues Datenbankobjekt der Version to zurück. Andernfalls gibt sie einen undefinierten Wert zurück.
Wenn die aktuelle Version von db nicht von ist, wird eine Ausnahme geworfen.
Andernfalls wird eine Datenbanktransaktion erstellt und an callback übergeben. In dieser Funktion können Sie executeSql auf tx aufrufen, um die Datenbank zu aktualisieren.
Kann eine Ausnahme mit der Code-Eigenschaft SQLException.DATABASE_ERR oder SQLException.UNKNOWN_ERR auslösen.
Siehe Beispiel unten.
var db = LocalStorage.openDatabaseSync("ActivityTrackDB", "", "Database tracking sports activities", 1000000); if (db.version == "0.1") { db.changeVersion("0.1", "0.2", function(tx) { tx.executeSql("INSERT INTO trip_log VALUES(?, ?, ?)", [ "01/10/2016","Sylling - Vikersund", "53" ]); } });
db.transaction(callback(tx))
Diese Methode erstellt eine Lese-/Schreib-Transaktion und übergibt sie an callback. In dieser Funktion können Sie executeSql auf tx aufrufen, um die Datenbank zu lesen und zu ändern.
Wenn der Callback Ausnahmen auslöst, wird die Transaktion rückgängig gemacht. Nachstehend finden Sie ein Beispiel für eine Datenbanktransaktion, bei der Ausnahmen abgefangen werden.
{ let db = LocalStorage.openDatabaseSync("Activity_Tracker_DB", "", "Track exercise", 1000000) try { db.transaction(function (tx) { tx.executeSql('CREATE TABLE IF NOT EXISTS trip_log (date text,trip_desc text,distance numeric)') }) } catch (err) { console.log("Error creating table in database: " + err) }; }
In dem Beispiel sehen Sie eine insert
-Anweisung, in der den Feldern Werte zugewiesen werden und der Datensatz in die Tabelle geschrieben wird. Das ist eine insert
Anweisung mit einer Syntax, die für eine relationale Datenbank üblich ist. Es ist jedoch auch möglich, mit JSON-Objekten zu arbeiten und sie in einer Tabelle zu speichern.
Nehmen wir ein einfaches Beispiel an, bei dem wir Reisen im JSON-Format speichern und date
als eindeutigen Schlüssel verwenden. Ein Beispiel für eine Tabelle, die für diesen Zweck verwendet werden könnte:
create table trip_log(date text, data text)
Die Zuordnung von Werten zu einem JSON-Objekt:
var obj = {description = "Vikersund - Noresund", distance = "60"}
In diesem Fall könnten die Daten auf folgende Weise gespeichert werden:
db.transaction(function(tx) { result = tx.executeSQL("insert into trip_log values (?,?)", ["01/11/2016", JSON.stringify(obj)])
db.readTransaction(callback(tx))
Diese Methode erstellt eine schreibgeschützte Transaktion und übergibt sie an callback. In dieser Funktion können Sie executeSql auf tx aufrufen, um die Datenbank zu lesen (mit select
Anweisungen).
Ergebnisse = tx.executeSql(Anweisung, Werte)
Diese Methode führt eine SQL-Anweisung aus und bindet die Liste der Werte an SQL-Positionsparameter ("?").
Sie gibt ein Ergebnisobjekt mit den folgenden Eigenschaften zurück:
Typ | Eigenschaft | Wert | Anwendbarkeit |
---|---|---|---|
int | rows.length | Die Anzahl der Zeilen im Ergebnis | SELECT |
var | rows.item(i) | Funktion, die die Zeile i des Ergebnisses zurückgibt | SELECT |
int | rowsAffected | Die Anzahl der von einer Änderung betroffenen Zeilen | UPDATE, DELETE |
string | insertId | Die ID der eingefügten Zeile | INSERT |
Kann eine Ausnahme mit der Code-Eigenschaft SQLException.DATABASE_ERR, SQLException.SYNTAX_ERR oder SQLException.UNKNOWN_ERR auslösen.
Siehe unten für ein Beispiel:
function dbReadAll() { let db = dbGetHandle() db.transaction(function (tx) { let results = tx.executeSql( 'SELECT rowid,date,trip_desc,distance FROM trip_log order by rowid desc') for (let i = 0; i < results.rows.length; i++) { listModel.append({ id: results.rows.item(i).rowid, checked: " ", date: results.rows.item(i).date, trip_desc: results.rows.item(i).trip_desc, distance: results.rows.item(i).distance }) } }) }
Dokumentation der Methode
object openDatabaseSync(string name, string version, string description, int estimated_size, jsobject callback(db))
Öffnet oder erstellt eine lokal gespeicherte SQL-Datenbank mit den angegebenen Parametern.
name
ist der Name der Datenbankversion
ist die Datenbankversiondescription
ist der Anzeigename der Datenbankestimated_size
ist die geschätzte Größe der Datenbank, in Bytescallback
ist ein optionaler Parameter, der aufgerufen wird, wenn die Datenbank noch nicht erstellt worden ist.
Gibt das erstellte Datenbankobjekt zurück.
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.