2016-04-29 181 views
1

我有兴趣将外部SQLite数据库导入到我的项目中。 当使用Qt Quick的本地存储:将外部SQLite数据库导入到我的项目中

LocalStorage.openDatabaseSync("QQmlExampleDB", "1.0", "The Example QML SQL!", 1000000);

的问题是,该程序生成一个新的数据库,如果有可能我感兴趣的是打开现有的数据库。

有什么想法?

非常感谢!

回答

1

openDatabaseSync在用于存储离线数据的目录中搜索或创建dbs。
该目录由QQmlEngine类的数据成员offlineStoragePath标识。
要更改它,您可以使用成员方法setOfflineStoragePath(有关更多详细信息,请参阅here)。
openDatabaseSync第一个参数是:

()过去的openDatabase数据库的名称

进一步详情,请参阅here

+0

感谢您的回答,但有可能当前函数openDatabaseSync无法正常工作? 因为当我这样做,我穿上openDataBaseSync无论至极的名字,程序会创建一个具有ranom名称的新数据库,例如: a32d695d324fbf044d62821c5ee7e4de.sqlite 感谢 –

+0

我记得路径到数据库'QQmlEngine :: offlineStoragePafh' + md5(name)+“.sqlite”。其中'name'是'openDatabaseSync'的第一个参数,所以你应该把你的数据库放在正确的名字中,它会起作用。 – folibis

+0

@folibis用正确的名字创建空白文件就足够了,而不是交换两个文件。对? – skypjack

0

感谢在座的各位,随着信息你有我,我可以解决我的问题,我都不得不做的事情是:所有的main.cpp的 首先,我把我的离线存储路径:

engine.setOfflineStoragePath(QString("./")); 

然后我还添加以下代码:

QDir dir("./Databases"); 
if (!dir.exists()) { 
    dir.mkpath("."); 
} 
QString new_name = QString(QCryptographicHash::hash(("nameofthecopiedDB"),QCryptographicHash::Md5).toHex()); 

QFile file(":/SQLite/nameofsourceDB.sqlite"); 
file.copy("./Databases/" + new_name + ".sqlite"); 
file.close(); 

鉴于我在DB我会在我的项目从我的资源文件夹的SQLite使用(:,表明资源)。

,然后在QML文件中,openDatabaseSync()函数:

basedades = Sql.LocalStorage.openDatabaseSync('nameofthecopiedDB',"1.0","Els meus entrenaments",1000000,"QSQLITE") 

谢谢!