2017-03-08 4 views
1

qtアプリケーションを使用してsqliteデータベースに接続する際に問題があります。 私は複数の場所でコードを再利用したいので、データベースを開いたり閉じたりする関数を持っているヘルパークラスDBManagerを持っています。qtを使用してSQLiteデータベースに接続

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(); 
} 

エラー:私は私のデータベースにアクセスしようとしているところ はここ

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命名されdbmanager.cppで、実行可能 の隣に位置しており、ここにあります上記のコードはQSqlQuery :: prepareが起動したときに私に与えます:データベースは開いていません。

+0

デバッガで 'path'変数よりも検証しましたか?また、準備されたクエリを使用する方法についても読んでください。現在のコードには、SQLインジェクション攻撃の可能性があります。 – MrEricSir

+0

qtのsqliteサポートは、データベースファイルがフォルダに存在しない場合、少なくとも新しいデータベースを作成しようとします。 – drescherjm

答えて

4

エラーコードは、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

これは、ありがとう! –

関連する問題