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üsselWert
BezeichnerDer Name der Datenbank, der an openDatabase()
VersionDie Version der Datenbank, die an openDatabase()
BeschreibungDie Beschreibung der Datenbank, die an openDatabase()
GeschätzteGrößeDie geschätzte Größe (in Bytes) der Datenbank, die an openDatabase()
TreiberDerzeit "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:

TypEigenschaftWertAnwendbarkeit
introws.lengthDie Anzahl der Zeilen im ErgebnisSELECT
varrows.item(i)Funktion, die die Zeile i des Ergebnisses zurückgibtSELECT
introwsAffectedDie Anzahl der von einer Änderung betroffenen ZeilenUPDATE, DELETE
stringinsertIdDie ID der eingefügten ZeileINSERT

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 Datenbank
  • version ist die Datenbankversion
  • description ist der Anzeigename der Datenbank
  • estimated_size ist die geschätzte Größe der Datenbank, in Bytes
  • callback 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.