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 데이터베이스 형식으로 저장되어 있습니다.
데이터베이스 연결은 자바스크립트 가비지 컬렉션 중에 자동으로 닫힙니다.
이 API는 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()
}
}이 API는 2009년 10월 29일자 W3C 작업 초안인 HTML5 웹 데이터베이스 API의 동기식 API를 준수합니다.
SQL 로컬 스토리지 예제는 오프라인 스토리지 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.