2017-03-08 165 views
1

我無法使用我的qt應用程序連接到我的sqlite數據庫。 我有一個輔助類DBManager,應該有打開和關閉數據庫的功能,因爲我想重複使用多個地方的代碼。 這裏是dbmanager.cpp使用qt連接到SQLite數據庫

DBManager::DBManager() 
{ 

} 
void DBManager::connOpen() 
{ 

    path = QCoreApplication::applicationDirPath() + "/GameSuitedb.db"; 
    mydb=QSqlDatabase::addDatabase("QSQLITE"); 
    mydb.setDatabaseName(path); 

void DBManager::connClose() /*Closes connection and commits changes to database*/ 
{ 
    mydb.close(); 
    mydb.removeDatabase(QSqlDatabase::defaultConnection); 
} 

注意我的數據庫名爲GameSuitedb和毗鄰的可執行 而這裏就是我試圖訪問我的數據庫:

void CreateUser::on_pushButton_submit_clicked() 
{ 
    dbmanager.connOpen(); 
    QString username = ui->lineEdit_username->text(); 
    QString password = ui->lineEdit_password->text(); //Gets password text 
    QSqlQuery qry(dbmanager.mydb); 
    qry.prepare("INSERT INTO users (username,password) VALUES ('"+username+"', '"+password+"')"); 

    if(qry.exec()){ 
    } 
    else{ 
     ui->statusbar->showMessage(qry.lastError().text()); 
    } 
     dbmanager.connClose(); 
} 

的錯誤上面的代碼在啓動時給了我QSqlQuery :: prepare:數據庫未打開。

+0

您是否在調試器中驗證了路徑變量是您認爲的?另外,請閱讀如何使用準備好的查詢 - 您當前的代碼包含SQL注入攻擊的明顯機會。 – MrEricSir

+0

如果數據庫文件不存在於文件夾中,qt中的sqlite支持至少會嘗試創建一個新的數據庫。 – drescherjm

回答

4

錯誤代碼告訴你數據庫沒有打開,因爲你的DBManager::connOpen()函數似乎在做除了實際打開數據庫之外的任何事情,這與它的命名方式相反。

您需要在DBManager::connOpen()函數末尾調用QSqlDatabase::open(),以便數據庫被打開並準備好使用。

void DBManager::connOpen() 
{ 
    path = QCoreApplication::applicationDirPath() + "/GameSuitedb.db"; 
    mydb=QSqlDatabase::addDatabase("QSQLITE"); 
    mydb.setDatabaseName(path); 
    if(!mydb.open()) 
    { 
     //use lastError() here to figure out what went wrong. 
    } 
} 
+0

這有幫助,謝謝! –