我在嘗試連接到一個Qt應用程序中的兩個不同數據庫時出現問題。我有我的信息數據庫,它存儲應用程序收集的所有信息以及新的日誌數據庫,使我能夠跟蹤應用程序,按鈕按鈕,屏幕加載等發生的所有更改,以便在其發佈後進行調試。另外,數據庫工作得很好,但是當我嘗試使用它們時,只有一個會起作用。我讀到這可能是因爲我沒有命名連接,顯然只有最近連接的數據庫才能使用默認連接。然而,當我把數據庫名,他們不會在所有的工作,ISOPEN()將返回兩個真實的,但只要他們試圖執行一個查詢我得到的錯誤QSqlDatabase連接到多個數據庫
"QSqlQuery::prepare: database not open"
"QSqlError(-1, "Driver not loaded", "Driver not loaded")"
我的兩個數據庫聲明是:
database_location = filepath.append("/logger.sqlite");
logDB = QSqlDatabase::addDatabase("QSQLITE", "LoggerDatabaseConnection");
logDB.setHostName("localhost");
logDB.setDatabaseName(database_location);
記錄程序數據庫連接和:
database_location = filepath.append("/db.sqlite");
db = QSqlDatabase::addDatabase("QSQLITE", "NormalDB");
db.setHostName("localhost");
db.setDatabaseName(database_location);
此外,當我運行在數據庫中的第一個查詢,看是否存在其表我使用
QSqlQuery query("LoggerDatabaseConnection");
對於普通數據庫也是這樣,但即使在聲明數據庫連接來運行查詢之後,我仍然遇到連接問題。
用於應用程序的數據庫在名稱空間中聲明爲靜態QSqlDatabase以創建全局效果,因此每個人都可以訪問它,這是以前的程序員,並且我創建了具有專用數據庫連接的Singleton Log數據庫。就像我說的那樣,兩個版本的代碼是分開工作的,但是當他們在一起時,他們正在互相爭鬥。我知道關於Singleton vs Dependecy Injection的正確設計存在着巨大的爭議,但代碼再次單獨運作,所以我很滿意現在的設計。如果有任何信息丟失或有任何想法,請告訴我。謝謝。
我最終只是將數據庫與記錄器相結合,我試圖避免讓所有的模塊都保持一致。但是,我使用兩個數據庫連接並使用您所建議的語法開始了一個測試項目,而且似乎最終還是有效的。非常感謝您的寶貴時間。 – JordanTSI 2014-10-17 14:53:00