使用qt连接到SQLite数据库

时间:2017-03-08 23:00:29

标签: c++ qt sqlite

我无法使用qt应用程序连接到我的sqlite数据库。 我有一个辅助类DBManager,它应该具有打开和关闭数据库的功能,因为我想在多个地方重用代码。 这是dbmanager.cpp

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:数据库未打开。

1 个答案:

答案 0 :(得分:4)

错误代码告诉您数据库未打开,因为您的auto pair_view = ranges::view::zip(lines | ranges::view::take(lines.size() - 1), lines | ranges::view::drop(1)); for (auto&& p : pair_view) { p = removeOverlap(p); } 函数似乎正在执行除实际打开数据库之外的所有操作,这与它的命名方式相反。

您需要在DBManager::connOpen()函数末尾调用QSqlDatabase::open(),以便数据库打开并准备好使用。

DBManager::connOpen()