Auf dieser Seite

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))

Ausführliche Beschreibung

Um die Typen in diesem Modul zu verwenden, importieren Sie das Modul und rufen Sie die entsprechenden Funktionen mithilfe des Typs ` LocalStorage ` auf:

import QtQuick
import QtQuick.LocalStorage

Item {
    Component.onCompleted: {
        var db = LocalStorage.openDatabaseSync(...)
    }
}

Diese Datenbanken sind benutzerspezifisch und QML-spezifisch, stehen jedoch allen QML-Anwendungen zur Verfügung. Sie werden im Unterverzeichnis „ Databases “ von „ QQmlEngine::offlineStoragePath “ () gespeichert, derzeit als SQLite-Datenbanken.

Datenbankverbindungen werden während der JavaScript-Garbage-Collection automatisch geschlossen.

Die API kann aus JavaScript-Funktionen in Ihrem QML genutzt 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 synchronen API der HTML5-Web-Database-API, W3C-Arbeitsentwurf vom 29. Oktober 2009.

Das Beispiel „SQL Local Storage“ veranschaulicht die Grundlagen der Verwendung der Offline-Storage-API.

Datenbank öffnen oder erstellen

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. Falls die Datenbank noch nicht existiert, wird sie angelegt, und die Callback-Funktion wird 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 (siehe unten) geschrieben, werden derzeit jedoch nicht verwendet.

Es kann eine Ausnahme mit der Eigenschaft „SQLException.DATABASE_ERR“ oder „SQLException.VERSION_ERR“ ausgelöst werden.

Wenn eine Datenbank zum ersten Mal angelegt wird, wird zusätzlich eine INI-Datei erstellt, in der ihre Eigenschaften festgelegt sind:

SchlüsselWert
BezeichnerDer Name der Datenbank, der an openDatabase()
VersionDie an die Datenbank übergebene Version openDatabase()
BeschreibungDie Beschreibung der an übergebener Datenbank openDatabase()
GeschätzteGrößeDie geschätzte Größe (in Byte) der an übermittelten Datenbank 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. Bei Erfolg gibt sie ein neues Datenbankobjekt der Version „to“ zurück. Andernfalls gibt sie „undefined“ zurück.

Wenn die aktuelle Version von „db“ nicht „from“ ist, wird eine Ausnahme ausgelöst.

Andernfalls wird eine Datenbanktransaktion erstellt und an `callback` übergeben. In dieser Funktion können Sie `executeSql` auf `tx` aufrufen, um die Datenbank zu aktualisieren.

Es kann eine Ausnahme mit der Code-Eigenschaft `SQLException.DATABASE_ERR` oder `SQLException.UNKNOWN_ERR` ausgelöst werden.

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 die Callback-Funktion. In dieser Funktion können Sie die Methode `executeSql` auf `tx` aufrufen, um die Datenbank zu lesen und zu ändern.

Wenn der Callback Ausnahmen auslöst, wird die Transaktion zurückgesetzt. Nachfolgend finden Sie ein Beispiel für eine Datenbanktransaktion, die Ausnahmen abfängt.

{
    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, bei der den Feldern Werte zugewiesen und der Datensatz in die Tabelle geschrieben wird. Dabei handelt es sich um eine ` insert `-Anweisung mit einer für relationale Datenbanken üblichen Syntax. Es ist jedoch auch möglich, mit JSON-Objekten zu arbeiten und diese in einer Tabelle zu speichern.

Nehmen wir ein einfaches Beispiel an, bei dem wir Reisen im JSON-Format speichern und dabei ` 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 Zuweisung von Werten zu einem JSON-Objekt:

var obj = {description = "Vikersund - Noresund", distance = "60"}

In diesem Fall könnten die Daten wie folgt 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 die Callback-Funktion. In dieser Funktion können Sie `executeSql` auf `tx` aufrufen, um die Datenbank auszulesen (mit ` select `-Anweisungen).

results = tx.executeSql(Anweisung, Werte)

Diese Methode führt eine SQL -Anweisung aus und bindet die Liste der Werte an die positionellen SQL-Parameter („?“).

Sie gibt ein Ergebnisse-Objekt 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
ZeichenketteinsertIdDie ID der eingefügten ZeileINSERT

Kann eine Ausnahme mit den Codes SQLException.DATABASE_ERR, SQLException.SYNTAX_ERR oder SQLException.UNKNOWN_ERR auslösen.

Ein Beispiel finden Sie weiter unten:

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
                             })
        }
    })
}

Methodendokumentation

object openDatabaseSync(string name, string version, string description, int estimated_size,
jsobject callback(db))

Öffnet oder erstellt eine lokale SQL-Datenbank anhand der angegebenen Parameter.

  • 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 Byte
  • callback ist ein optionaler Parameter, der aufgerufen wird, wenn die Datenbank noch nicht angelegt wurde.

Gibt das erstellte Datenbankobjekt zurück.

© 2026 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.