Sur cette page

Qt Quick Local Storage QML Types

Il s'agit d'un type singleton permettant la lecture et l'écriture dans des bases de données SQLite.

Méthodes

  • objet openDatabaseSync(chaîne nom, chaîne version, chaîne description, entier taille_estimée, jsobject callback(db))

Description détaillée

Pour utiliser les types de ce module, importez le module et appelez les fonctions correspondantes en utilisant le type ` LocalStorage ` :

import QtQuick
import QtQuick.LocalStorage

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

Ces bases de données sont spécifiques à l'utilisateur et à QML, mais accessibles à toutes les applications QML. Elles sont stockées dans le sous-répertoire ` Databases ` de ` QQmlEngine::offlineStoragePath` (), actuellement sous forme de bases de données SQLite.

Les connexions aux bases de données sont automatiquement fermées lors du ramassage des déchets JavaScript.

L'API peut être utilisée à partir de fonctions JavaScript dans votre code QML :

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

L'API est conforme à l'API synchrone de l'API de base de données Web HTML5, projet de travail du W3C du 29 octobre 2009.

L'exemple « SQL Local Storage » illustre les principes de base de l'utilisation de l'API de stockage hors ligne.

Ouvrir ou créer une base de données

import QtQuick.LocalStorage as Sql

db = Sql.openDatabaseSync(identifier, version, description, estimated_size, callback(db))

Le code ci-dessus renvoie la base de données identifiée par identifier. Si la base de données n'existe pas encore, elle est créée, puis la fonction callback est appelée avec la base de données en paramètre. identifier est le nom du fichier physique (avec ou sans chemin relatif) contenant la base de données. description et estimated_size sont écrits dans le fichier INI (décrit ci-dessous), mais ne sont actuellement pas utilisés.

Peut lever une exception avec la propriété de code SQLException.DATABASE_ERR ou SQLException.VERSION_ERR.

Lors de la création initiale d’une base de données, un fichier INI est également créé pour spécifier ses caractéristiques :

CléValeur
IdentifiantLe nom de la base de données transmis à openDatabase()
VersionLa version de la base de données transmise à openDatabase()
DescriptionLa description de la base de données transmise à openDatabase()
TailleEstiméeLa taille estimée (en octets) de la base de données transmise à openDatabase()
PiloteActuellement « QSQLITE »

Ces données peuvent être utilisées par des outils d'application.

db.changeVersion(from, to, callback(tx))

Cette méthode permet d'effectuer une mise à niveau de Scheme. En cas de réussite, elle renvoie un nouvel objet de base de données de version « to ». Dans le cas contraire, elle renvoie « undefined ».

Si la version actuelle de db n'est pas « from », une exception est levée.

Sinon, une transaction de base de données est créée et transmise à callback. Dans cette fonction, vous pouvez appeler executeSql sur tx pour mettre à niveau la base de données.

Peut lever une exception avec la propriété de code SQLException.DATABASE_ERR ou SQLException.UNKNOWN_ERR.

Voir l'exemple ci-dessous.

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

Cette méthode crée une transaction en lecture/écriture et la transmet à la fonction de rappel. Dans cette fonction, vous pouvez appeler la méthode `executeSql` sur `tx` pour lire et modifier la base de données.

Si la fonction de rappel lève des exceptions, la transaction est annulée. Vous trouverez ci-dessous un exemple de transaction de base de données qui intercepte les exceptions.

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

Dans cet exemple, vous pouvez voir une instruction ` insert ` dans laquelle des valeurs sont attribuées aux champs, puis l'enregistrement est écrit dans la table. Il s'agit d'une instruction ` insert ` dont la syntaxe est courante dans les bases de données relationnelles. Il est toutefois également possible de travailler avec des objets JSON et de les stocker dans une table.

Prenons un exemple simple dans lequel nous stockons des trajets au format JSON en utilisant « date » comme clé unique. Voici un exemple de table qui pourrait être utilisée à cette fin :

create table trip_log(date text, data text)

L'affectation de valeurs à un objet JSON :

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

Dans ce cas, les données pourraient être enregistrées de la manière suivante :

db.transaction(function(tx) {
    result = tx.executeSQL("insert into trip_log values (?,?)",
                           ["01/11/2016", JSON.stringify(obj)])

db.readTransaction(callback(tx))

Cette méthode crée une transaction en lecture seule et la transmet à la fonction de rappel. Dans cette fonction, vous pouvez appeler la méthode `executeSql` sur `tx` pour lire la base de données (à l'aide d'instructions ` select `).

results = tx.executeSql(instruction, valeurs)

Cette méthode exécute une instruction SQL, en associant la liste de valeurs aux paramètres positionnels SQL (« ? »).

Elle renvoie un objet « results » comportant les propriétés suivantes :

TypePropriétéValeurApplicabilité
introws.lengthNombre de lignes dans le résultatSELECT
varrows.item(i)Fonction qui renvoie la ligne i du résultatSELECT
introwsAffectedNombre de lignes affectées par une modificationUPDATE, DELETE
chaîneinsertIdL'identifiant de la ligne inséréeINSERT

Peut lever une exception avec la propriété de code SQLException.DATABASE_ERR, SQLException.SYNTAX_ERR ou SQLException.UNKNOWN_ERR.

Voir ci-dessous pour un exemple :

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

Documentation de la méthode

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

Ouvre ou crée une base de données SQL en stockage local selon les paramètres indiqués.

  • name est le nom de la base de données
  • version est la version de la base de données
  • description est le nom d'affichage de la base de données
  • estimated_size est la taille estimée de la base de données, en octets
  • callback est un paramètre facultatif, qui est utilisé si la base de données n'a pas encore été créée.

Renvoie l'objet de base de données créé.

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