QML使用Sqlite数据库

在程序中,我们经常需要把一些数据持久化,比如一些设置信息和程序配置。QML并不能直接访问本地文件,但是可以通过

Offline Storage API访问本地Sqlite数据库,从而达到目的。

 

首先在qml目录下创建一个storage.js

[javascript]  view plain  copy
  1. //storage.js  
  2. // 首先创建一个helper方法连接数据库  
  3. .import QtQuick.LocalStorage 2.0 as Sql

  4. function getDatabase() {  
  5.      return Sql.LocalStorage.openDatabaseSync("MyAppName""1.0""StorageDatabase", 100000);  
  6. }  
  7.    
  8. // 程序打开时,初始化表  
  9. function initialize() {  
  10.     var db = getDatabase();  
  11.     db.transaction(  
  12.         function(tx) {  
  13.             // 如果setting表不存在,则创建一个  
  14.             // 如果表存在,则跳过此步  
  15.             tx.executeSql('CREATE TABLE IF NOT EXISTS settings(setting TEXT UNIQUE, value TEXT)');  
  16.       });  
  17. }  
  18.    
  19. // 插入数据  
  20. function setSetting(setting, value) {  
  21.    var db = getDatabase();  
  22.    var res = "";  
  23.    db.transaction(function(tx) {  
  24.         var rs = tx.executeSql('INSERT OR REPLACE INTO settings VALUES (?,?);', [setting,value]);  
  25.               //console.log(rs.rowsAffected)  
  26.               if (rs.rowsAffected > 0) {  
  27.                 res = "OK";  
  28.               } else {  
  29.                 res = "Error";  
  30.               }  
  31.         }  
  32.   );  
  33.   return res;  
  34. }  
  35.   
  36.  // 获取数据  
  37. function getSetting(setting) {  
  38.    var db = getDatabase();  
  39.    var res="";  
  40.    db.transaction(function(tx) {  
  41.      var rs = tx.executeSql('SELECT value FROM settings WHERE setting=?;', [setting]);  
  42.      if (rs.rows.length > 0) {  
  43.           res = rs.rows.item(0).value;  
  44.      } else {  
  45.          res = "Unknown";  
  46.      }  
  47.   })  
  48.   return res  
  49. }  

 然后就可以在qml里调用了

[php]  view plain  copy
  1. import Qt 4.7  
  2. //引入storage.js,起个别名Storage,以供后面使用  
  3. import "storage.js" as Storage  
  4. Rectangle {  
  5.     width: 360  
  6.     height: 360  
  7.     id: screen  
  8.     Text {  
  9.         id: textDisplay  
  10.         anchors.centerIn: parent  
  11.     }  
  12.     Component.onCompleted: {  
  13.         // 初始化数据库  
  14.         Storage.initialize();  
  15.         // 赋值  
  16.         Storage.setSetting("mySetting","myValue");  
  17.         //获取一个值,并把它写在textDisplay里  
  18.         textDisplay.text = "The value of mySetting is:\n" + Storage.getSetting("mySetting");  
  19.     }  
  20. }  

猜你喜欢

转载自blog.csdn.net/clinuxf/article/details/80169331