2016-04-29 185 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") 

謝謝!