如何确定SQLite文件在QML LocalStorage中的存储位置

时间:2017-05-24 21:44:04

标签: javascript c++ qt mobile qml

我有这段代码:

import QtQuick 2.6
import QtQuick.Controls 2.1
import QtQuick.LocalStorage 2.0

ApplicationWindow {
visible: true
width: 640
height: 480
title: qsTr("Hello World")

property var db // the database of this application
property string dbIdentifier: '/Users/cedo/desktop/test/DatabaseApplicationDB.db'
property string dbVersion: '1.0'
property string dbDescription: 'DatabaseApplicationDB'
property int dbEstimatedSize: 1000000

Component.onCompleted: {
    db = LocalStorage.openDatabaseSync(dbIdentifier, dbVersion, dbDescription, dbEstimatedSize);

    db.transaction(function(tx) {
        var sql = "create table if not exists mytable(id integer)";
        tx.executeSql(sql);
    });

}
}

dbIdentifier在创建数据库时有效,但是当我在桌面上搜索db文件时,文件不在那里。它在哪里?或者如何决定放在哪里?

2 个答案:

答案 0 :(得分:2)

根据 openDatabaseSync()方法documentation,函数原型是:

object openDatabaseSync(string name, string version, string description, int estimated_size, jsobject callback(db))
  

名称是数据库名称

     

版本是数据库版本

     

description 是数据库显示名称

     

estimated_size 是数据库的估计大小,以字节为单位

     

callback 是一个可选参数,如果尚未创建数据库,则会调用该参数。

所以没有文件名参数。再次,根据documentations

  

这些数据库是特定于用户和QML的,但可供所有QML应用程序访问。 它们存储在QQmlEngine :: offlineStoragePath()的Databases子目录中,目前作为SQLite数据库。

为了能够将数据库文件放入某个自定义目录,您应该使用 QQmlEngine setOfflineStoragePath(const QString& dir)功能或 QQmlApplicationEngine 实例。

要查看数据库文件当前所在的位置,请使用以下C ++代码:

QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
qDebug() << engine.offlineStoragePath();

更多信息herehere

答案 1 :(得分:0)

在Linux上,它是.local/share/*project_name*/QML/OfflineStorage/Databases