转载:http://thierry-xing.iteye.com/blog/1387855
在程序中,我们经常需要把一些数据持久化,比如一些设置信息和程序配置。QML并不能直接访问本地文件,但是可以通过
Offline Storage API访问本地Sqlite数据库,从而达到目的。
首先在qml目录下创建一个storage.js
//storage.js
// 首先创建一个helper方法连接数据库
function getDatabase() {
return openDatabaseSync("MyAppName", "1.0", "StorageDatabase", 100000);
}
// 程序打开时,初始化表
function initialize() {
var db = getDatabase();
db.transaction(
function(tx) {
// 如果setting表不存在,则创建一个
// 如果表存在,则跳过此步
tx.executeSql('CREATE TABLE IF NOT EXISTS settings(setting TEXT UNIQUE, value TEXT)');
});
}
// 插入数据
function setSetting(setting, value) {
var db = getDatabase();
var res = "";
db.transaction(function(tx) {
var rs = tx.executeSql('INSERT OR REPLACE INTO settings VALUES (?,?);', [setting,value]);
//console.log(rs.rowsAffected)
if (rs.rowsAffected > 0) {
res = "OK";
} else {
res = "Error";
}
}
);
return res;
}
// 获取数据
function getSetting(setting) {
var db = getDatabase();
var res="";
db.transaction(function(tx) {
var rs = tx.executeSql('SELECT value FROM settings WHERE setting=?;', [setting]);
if (rs.rows.length > 0) {
res = rs.rows.item(0).value;
} else {
res = "Unknown";
}
})
return res
}
然后就可以在qml里调用了
import Qt 4.7
//引入storage.js,起个别名Storage,以供后面使用
import "storage.js" as Storage
Rectangle {
360
height: 360
id: screen
Text {
id: textDisplay
anchors.centerIn: parent
}
Component.onCompleted: {
// 初始化数据库
Storage.initialize();
// 赋值
Storage.setSetting("mySetting","myValue");
//获取一个值,并把它写在textDisplay里
textDisplay.text = "The value of mySetting is:
" + Storage.getSetting("mySetting");
}
}