Qt Quick Local Storage QML Types

これはSQLiteデータベースを読み書きするためのシングルトン型である。

メソッド

  • オブジェクト openDatabaseSync(文字列名, 文字列バージョン, 文字列説明, int estimated_size, jsobject callback(db))

詳しい説明

このモジュールの型を使用するには、モジュールをインポートし、LocalStorage 型を使用して関連する関数を呼び出します:

import QtQuick
import QtQuick.LocalStorage

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

これらのデータベースはユーザ固有のものであり、QML固有のものですが、すべてのQMLアプリケーションからアクセス可能です。これらのデータベースは、QQmlEngine::offlineStoragePath()のDatabases サブディレクトリに、現在のところSQLiteデータベースとして格納されています。

データベース接続はJavascriptのガベージコレクション時に自動的に閉じられます。

APIはQMLのJavaScript関数から利用することができます:

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

このAPIはHTML5 Web Database APIのSynchronous API,W3C Working Draft 29 October 2009に準拠しています。

SQL Local Storage の例では、Offline Storage API の基本的な使い方を説明しています。

データベースのオープンまたは作成

import QtQuick.LocalStorage as Sql

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

上記のコードはidentifier で識別されるデータベースを返します。データベースがまだ存在しない場合は作成され、データベースをパラメータとして関数のコールバックが呼び出されます。identifierはデータベースを含む物理ファイル名(相対パスの有無は問いません)です。descriptionと estimated_sizeはINIファイル(後述)に書き込まれますが、現在は未使用です。

コードプロパティ SQLException.DATABASE_ERR または SQLException.VERSION_ERR を持つ例外を投げる可能性があります。

データベースが最初に作成されるとき、その特性を指定するINIファイルも作成されます:

キー
識別子に渡されるデータベースの名前。openDatabase()
バージョン渡されたデータベースのバージョンopenDatabase()
説明渡されたデータベースの説明openDatabase()
推定サイズに渡されるデータベースの推定サイズ(バイト)。openDatabase()
ドライバ現在は "QSQLITE"

このデータはアプリケーション・ツールで使用できます。

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

このメソッドでScheme Upgradeを実行できます。成功すれば、新しいデータベースオブジェクトを返します。そうでない場合は未定義を返します。

dbの現在のバージョンがfrom でない場合は例外がスローされます。

そうでない場合は、データベース・トランザクションが作成され、コールバックに渡されます。この関数では、データベースをアップグレードするためにtxに対して executeSqlを呼び出すことができます。

コードプロパティ SQLException.DATABASE_ERR または SQLException.UNKNOWN_ERR を持つ例外がスローされる可能性があります。

以下の例を参照してください。

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

このメソッドは読み取り/書き込みトランザクションを作成し、コールバックに渡します。この関数では、txに対してexecuteSql を呼び出すことで、データベースの読み取りと変更を行うことができます。

コールバックが例外をスローした場合、トランザクションはロールバックされます。以下に、例外をキャッチするデータベーストランザクションの例を示します。

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

この例では、フィールドに値が代入され、レコードがテーブルに書き込まれるinsert 。これは、リレーショナル・データベースで一般的な構文のinsert 。しかし、JSONオブジェクトを扱ってテーブルに格納することも可能である。

単純な例として、date をユニークキーとして、JSON形式で旅行を保存する場合を考えてみよう。そのために使用できるテーブルの例です:

create table trip_log(date text, data text)

JSONオブジェクトへの値の割り当て:

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

その場合、データは次のように保存できる:

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

db.readTransaction(callback(tx))

このメソッドは読み取り専用のトランザクションを作成し、コールバックに渡す。この関数では、txに対してexecuteSql を呼び出してデータベースを読み込むことができます(select ステートメントを使用)。

results = tx.executeSql(statement, values)

このメソッドは SQL文を実行し、値のリストを SQL の位置パラメーター ("?") にバインドします。

以下のプロパティを持つ結果オブジェクトを返します:

タイププロパティ適用性
int行の長さ結果の行数SELECT
varrows.item(i)結果のi行目を返す関数SELECT
int影響を受ける行数変更によって影響を受ける行の数。UPDATE、DELETE
文字列insertId挿入された行のIDINSERT

コードプロパティ SQLException.DATABASE_ERR、SQLException.SYNTAX_ERR、または SQLException.UNKNOWN_ERR を持つ例外をスローする可能性があります。

例を以下に示します:

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

メソッドのドキュメント

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

与えられたパラメータでローカルストレージの sql データベースをオープンまたは作成します。

  • name はデータベース名です。
  • version はデータベースのバージョンです。
  • description はデータベースの表示名です。
  • estimated_size はデータベースの推定サイズ(バイト単位)です。
  • callback はオプションのパラメータで、データベースがまだ作成されていない場合に呼び出されます。

作成されたデータベースオブジェクトを返します。

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