En esta página

Qt Quick Local Storage QML Types

Este es un tipo singleton para leer y escribir en bases de datos SQLite.

Métodos

  • objeto openDatabaseSync(string nombre, string versión, string descripción, int tamaño_estimado, jsobject callback(db))

Descripción detallada

Para utilizar los tipos de este módulo, importe el módulo y llame a las funciones correspondientes utilizando el tipo LocalStorage:

import QtQuick
import QtQuick.LocalStorage

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

Estas bases de datos son específicas del usuario y de QML, pero accesibles a todas las aplicaciones QML. Se almacenan en el subdirectorio Databases de QQmlEngine::offlineStoragePath(), actualmente como bases de datos SQLite.

Las conexiones a las bases de datos se cierran automáticamente durante la recolección de basura de Javascript.

La API puede utilizarse desde funciones JavaScript en su 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()
    }
}

La API se ajusta a la API síncrona de la API de base de datos web HTML5, borrador de trabajo del W3C del 29 de octubre de 2009.

El ejemplo de Almacenamiento Local SQL demuestra los fundamentos del uso de la API de Almacenamiento Fuera de Línea.

Abrir o crear una base de datos

import QtQuick.LocalStorage as Sql

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

El código anterior devuelve la base de datos identificada por el identificador. Si la base de datos aún no existe, se crea, y se llama a la función callback con la base de datos como parámetro. identifier es el nombre del archivo físico (con o sin ruta relativa) que contiene la base de datos. description y estimated_size se escriben en el archivo INI (descrito más adelante), pero actualmente no se utilizan.

Puede lanzar una excepción con la propiedad de código SQLException.DATABASE_ERR, o SQLException.VERSION_ERR.

Cuando se crea una base de datos por primera vez, también se crea un fichero INI especificando sus características:

ClaveValor
IdentificadorEl nombre de la base de datos que se pasa a openDatabase()
VersiónLa versión de la base de datos pasada a openDatabase()
DescripciónLa descripción de la base de datos pasada a openDatabase()
Tamaño estimadoEl tamaño estimado (en bytes) de la base de datos pasado a openDatabase()
ControladorActualmente "QSQLITE"

Estos datos pueden ser utilizados por herramientas de aplicación.

db.changeVersion(desde, hasta, callback(tx))

Este método permite realizar una actualización de esquema. Si tiene éxito devuelve un nuevo objeto de base de datos de la versión a. En caso contrario devuelve undefined.

Si la versión actual de db no es de, entonces se lanza una excepción.

En caso contrario, se crea una transacción de base de datos y se pasa a callback. En esta función, puede llamar a executeSql en tx para actualizar la base de datos.

Puede lanzar una excepción con la propiedad de código SQLException.DATABASE_ERR o SQLException.UNKNOWN_ERR.

Véase el ejemplo siguiente.

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

Este método crea una transacción de lectura/escritura y la pasa a callback. En esta función, puede llamar a executeSql en tx para leer y modificar la base de datos.

Si el callback lanza excepciones, la transacción es revertida. A continuación encontrará un ejemplo de una transacción de base de datos que captura excepciones.

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

En el ejemplo se puede ver una sentencia insert en la que se asignan valores a los campos y se escribe el registro en la tabla. Se trata de una sentencia insert con una sintaxis habitual para una base de datos relacional. Sin embargo, también es posible trabajar con objetos JSON y almacenarlos en una tabla.

Supongamos un ejemplo sencillo en el que almacenamos viajes en formato JSON utilizando date como clave única. Un ejemplo de tabla que se podría utilizar para ese fin:

create table trip_log(date text, data text)

La asignación de valores a un objeto JSON:

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

En ese caso, los datos podrían guardarse de la siguiente manera:

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

db.readTransaction(callback(tx))

Este método crea una transacción de sólo lectura y la pasa a callback. En esta función, puede llamar a executeSql sobre tx para leer la base de datos (con sentencias select ).

results = tx.executeSql(sentencia, valores)

Este método ejecuta una sentencia SQL, vinculando la lista de valores a parámetros posicionales SQL ("?").

Devuelve un objeto results, con las siguientes propiedades:

TipoPropiedadValorAplicabilidad
intlongitud.filasEl número de filas del resultadoSELECT
varfilas.item(i)Función que devuelve la fila i del resultadoSELECT
intfilasAfectadasEl número de filas afectadas por una modificaciónUPDATE, DELETE
cadenainsertIdEl id de la fila insertadaINSERTAR

Puede lanzar una excepción con la propiedad de código SQLException.DATABASE_ERR, SQLException.SYNTAX_ERR, o SQLException.UNKNOWN_ERR.

Véase un ejemplo a continuación:

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

Documentación del método

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

Abre o crea una base de datos sql de almacenamiento local mediante los parámetros dados.

  • name es el nombre de la base de datos
  • version es la versión de la base de datos
  • description es el nombre para mostrar de la base de datos
  • estimated_size es el tamaño estimado de la base de datos, en bytes
  • callback es un parámetro opcional, que se invoca si la base de datos aún no se ha creado.

Devuelve el objeto de base de datos creado.

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