Qt Quick Local Storage QML Types
SQLite 데이터베이스를 읽고 쓰기 위한 싱글톤 유형입니다.
메서드
- object 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 데이터베이스로 저장됩니다.
데이터베이스 연결은 자바스크립트 가비지 수집 중에 자동으로 닫힙니다.
이 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 웹 데이터베이스 API의 동기식 API( 2009년 10월 29일 W3C 작업 초안)를 준수합니다.
SQL 로컬 저장소 예제는 오프라인 저장소 API 사용의 기본을 보여줍니다.
데이터베이스 열기 또는 만들기
import QtQuick.LocalStorage as Sql db = Sql.openDatabaseSync(identifier, version, description, estimated_size, callback(db))
위 코드는 식별자로 식별된 데이터베이스를 반환합니다. 데이터베이스가 아직 존재하지 않으면 데이터베이스가 생성되고 데이터베이스를 매개변수로 사용하여 함수 콜백이 호출됩니다. identifier는 데이터베이스가 포함된 실제 파일 이름(상대 경로 포함 또는 제외)입니다. description 및 estimated_size는 INI 파일에 기록되지만(아래 설명) 현재 사용되지 않습니다.
코드 속성 SQLException.DATABASE_ERR 또는 SQLException.VERSION_ERR로 예외가 발생할 수 있습니다.
데이터베이스가 처음 생성될 때 데이터베이스의 특성을 지정하는 INI 파일도 생성됩니다:
Key | Value |
---|---|
식별자 | 전달된 데이터베이스의 이름 openDatabase() |
버전 | 전달된 데이터베이스의 버전입니다. openDatabase() |
Description | 전달된 데이터베이스의 설명입니다. openDatabase() |
EstimatedSize | 에 전달된 데이터베이스의 예상 크기(바이트 단위)입니다. openDatabase() |
Driver | 현재 "QSQLITE" |
이 데이터는 애플리케이션 도구에서 사용할 수 있습니다.
db.changeVersion(from, to, callback(tx))
이 메서드를 사용하면 스키마 업그레이드를 수행할 수 있습니다. 성공하면 새 버전의 데이터베이스 객체를 반환합니다. 그렇지 않으면 정의되지 않은 것을 반환합니다.
현재 버전의 데이터베이스가 아닌 경우 예외가 발생합니다.
그렇지 않으면 데이터베이스 트랜잭션이 생성되어 콜백으로 전달됩니다. 이 함수에서 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 위치 매개변수("?")에 바인딩합니다.
이 메서드는 다음과 같은 속성을 가진 결과 객체를 반환합니다:
유형 | Property | 값 | 적용 가능성 |
---|---|---|---|
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
는 선택적 매개변수로, 데이터베이스가 아직 생성되지 않은 경우 호출됩니다.
생성된 데이터베이스 객체를 반환합니다.
© 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.