QT QML中SQLite的数据库路径

Cady ·
更新时间:2024-11-10
· 867 次阅读

我们在用QT Quick的QML编写前端界面时,常常会用到前端SQLite数据库以保持本地的数据,此时你不需要用C++,直接用QML就可以了。

当编写完成代码后,你却不知道数据放在哪里了,实际上QT在你的代码完成后,会把数据库放在一个缺省的目录,本文以win10为为例,来说明如何定制化你的SQLite的缺省路径。

注意:
本文是从一个数据库操作项目中,节选的一部分内容,可参考
课程:

《QML SQLite数据库编程》 《QT QML跨平台移动APP编程》

首先创建QT 的项目文件,选择 New File or Project / Application / Qt Quick Application-Empty,然后输入项目名称就可以了。

我们引入项目对数据库操作的js文件:DataBase.js,内容为数据库操作的代码。

function dbInit() { var db = LocalStorage.openDatabaseSync("mySQLite", "1.0", "This is only for demo", 1000000) try { db.transaction(function (tx) { tx.executeSql('CREATE TABLE IF NOT EXISTS myclass (name text, teacher text)') }) console.log("Table Created!") } catch (err) { console.log("Error creating table in database: " + err) }; } function dbGetHandle() { try { var db = LocalStorage.openDatabaseSync("mySQLite", "1.0", "This is only for demo", 1000000) } catch (err) { console.log("Error opening database: " + err) } return db } function dbInsert(name, teacher) { var db = dbGetHandle() var rowid = 0; db.transaction(function (tx) { tx.executeSql('INSERT INTO myclass VALUES(?, ?)', [name, teacher]) var result = tx.executeSql('SELECT last_insert_rowid()') rowid = result.insertId }) return rowid; } function dbReadAll() { var db = dbGetHandle() db.transaction(function (tx) { var results = tx.executeSql( 'SELECT rowid,name,teacher FROM myclass order by rowid desc') for (var i = 0; i < results.rows.length; i++) { listModel.append({ id: results.rows.item(i).rowid, name: results.rows.item(i).name, teacher: results.rows.item(i).teacher }) } }) } function dbUpdate(name, teacher,Prowid) { var db = dbGetHandle() db.transaction(function (tx) { tx.executeSql( 'update myclass set name=?, teacher=? where rowid = ?', [name, teacher,Prowid]) }) } function dbDeleteRow(Prowid) { var db = dbGetHandle() db.transaction(function (tx) { tx.executeSql('delete from myclass where rowid = ?', [Prowid]) }) }

main.qml 的代码如下:

import QtQuick 2.12 import QtQuick.Controls 2.12 import QtQuick.Layouts 1.12 import QtQuick.LocalStorage 2.12 import "DataBase.js" as JS // 引入我们的JS文件 ApplicationWindow { visible: true width: 540 height: 960 title: qsTr("QML SQLite") Component.onCompleted: { JS.dbInit() // JS的文件初始化 } }

这时如果运行程序,我们发现SQLite的路径是:

C:\Users\james\AppData\Local\QMLSQLite\QML\OfflineStorage\Databases,你可以在这个目录下找到相应的数据库文件,可以通过SQLiteStudio打开。

这里james是我的用户名,你用自己的用户名,就可以看到你的路径了。

那么如何定制我们的SQLite路径了?

看一下main.cpp文件:

#include #include int main(int argc, char *argv[]) { QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling); QGuiApplication app(argc, argv); QQmlApplicationEngine engine; const QUrl url(QStringLiteral("qrc:/main.qml")); QObject::connect( &engine, &QQmlApplicationEngine::objectCreated, &app, [url](QObject *obj, const QUrl &objUrl) { if (!obj && url == objUrl) QCoreApplication::exit(-1); }, Qt::QueuedConnection); engine.setOfflineStoragePath("d://myappdir"); engine.load(url); return app.exec(); }

注意我们在代码中,增加了
engine.setOfflineStoragePath(“d://myappdir”);

这表明我们的数据库路径,设置在了d:\myappdir目录下。

jamescat 原创文章 8获赞 15访问量 2156 关注 私信 展开阅读全文
作者:jamescat



qml 数据 SQLite 数据库

需要 登录 后方可回复, 如果你还没有账号请 注册新账号