Qt Quick Local Storage QML Types
これは、SQLite データベースへの読み書きを行うためのシングルトン型です。
メソッド
- オブジェクト openDatabaseSync(string name, string version, string description, 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は、2009年10月29日付のW3Cワーキングドラフト「HTML5 Web Database API」の同期APIに準拠しています。
「SQL Local Storage」のサンプルでは、オフラインストレージAPIの使用方法の基本が示されています。
データベースの開くまたは作成
import QtQuick.LocalStorage as Sql
db = Sql.openDatabaseSync(identifier, version, description, estimated_size, callback(db))上記のコードは、identifier で指定されたデータベースを返します。 データベースがまだ存在しない場合は作成され、そのデータベースをパラメータとして関数callbackが呼び出されます。identifierは、データベースを含む物理ファイルの名前(相対パスの有無を問わず)です。descriptionおよびestimated_sizeはINIファイル(後述)に書き込まれますが、現在は使用されていません。
コードプロパティ SQLException.DATABASE_ERR または SQLException.VERSION_ERR の例外がスローされる場合があります。
データベースが最初に作成されると、その特性を指定するINIファイルも作成されます:
| キー | 値 |
|---|---|
| 識別子 | データベースの名前(以下に指定)openDatabase() |
| バージョン | 渡されたデータベースのバージョンopenDatabase() |
| 説明 | データベースの説明(以下に指定)openDatabase() |
| EstimatedSize | 渡されたデータベースの推定サイズ(バイト単位)openDatabase() |
| ドライバー | 現在は「QSQLITE」 |
このデータは、アプリケーションツールで使用できます。
db.changeVersion(from, to, callback(tx))
このメソッドを使用すると、スキームのアップグレードを実行できます。成功した場合は、バージョン`to` の新しいデータベースオブジェクトを返します。そうでない場合は、`undefined` を返します。
dbの現在のバージョンがfromと異なる場合、例外がスローされます。
それ以外の場合は、データベーストランザクションが作成され、callback に渡されます。この関数内では、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ステートメントを実行します。
このメソッドは、以下のプロパティを持つresultsオブジェクトを返します:
| 型 | プロパティ | 値 | 適用性 |
|---|---|---|---|
| int | rows.length | 結果に含まれる行数 | SELECT |
| var | rows.item(i) | 結果のi 番目の行を返す関数 | SELECT |
| int | rowsAffected | 変更の対象となる行数 | UPDATE、DELETE |
| 文字列 | insertId | 挿入された行の ID | INSERT |
コードプロパティ 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はオプションのパラメータであり、データベースがまだ作成されていない場合に呼び出されます。
作成されたデータベースオブジェクトを返します。
© 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.