QML 除了在 c++对象中使用 QSQlDatabase 来操作数据库之外,还可以使用 QtQuick.LocalStorage 来创建一个 QML专用的数据库。
Qt Quick Local Storage QML Types
使用步骤如下:
//设定数据库存放路径。 下面是 在二进制文件的当前文件下,创建一个 Database 文件夹
1. QQmlEngine::setOfflineStoragePath("./");
//创建 js 文件,写入对数据库的操作。 包含 打开数据库,
2.LocalStorage.openDatabaseSync() 打开数据库
3. 在qml 文件中LocalStorage
import QtQuick.LocalStorage 2.15
4. 引入js 文件 import "../../database.js" as DB
5. 在 qml 文件中使用
var db;
function initDatabase() {
db = LocalStorage.openDatabaseSync("data","1.0","define machine cnc basic information",100000) ;
try {
db.transaction(function(tx){
tx.executeSql('CREATE TABLE IF NOT EXISTS cnc_info \
(id INTEGER PRIMARY KEY AUTOINCREMENT,nc_id INT NOT NULL,nc_name TEXT,nc_des TEXT,nc_type INT,priority INT,diff_time INT)');
})
}catch(err){
console.log("Error creating table in database :" + err)
}
}
function readData(nc_id) {
var res ;
if(!db) {return ;}
db.transaction( function(tx){
var result = tx.executeSql('select (nc_id,nc_name,nc_des,nc_type,priority,diff_time) from cnc_info where nc_id = ',[nc_id]);
if(result.rows.length > 0) {
for(var i=0;i<result.rows.length;i++){
res.push(result.rows.item(i).value);
}
}
return res
})
}
function insertData(datalist) {
var res = false;
if(!db) { return; }
db.transaction( function(tx) {
var result = tx.executeSql('INSERT INTO cnc_info (nc_id,nc_name,nc_type,priority,diff_time,nc_des) VALUES (?,?,?,?,?,?);',
[datalist[0], datalist[1],datalist[2],datalist[3],datalist[4],datalist[5]]);
if (result.rowsAffected > 0) {
res = true;
}
})
return res
}
import QtQuick 2.0s
import QtQuick.LocalStorage 2.15
import "../../database.js" as DB
Component.onCompleted: { DB.initDatabase() }
Databases 文件夹内容,分别是 .ini文件和 .sqlite文件
.ini 文件存储了 访问数据库的一些必要信息
.sqlite 文件 存储了数据库的数据