【问题标题】:Connect to SQLite database using qt使用 qt 连接到 SQLite 数据库
【发布时间】:2017-03-08 23:00:29
【问题描述】:

我无法使用我的 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: database not open.

【问题讨论】:

  • 您是否在调试器中验证过path 变量与您认为的一样?此外,请阅读如何使用准备好的查询——您当前的代码包含明显的 SQL 注入攻击机会。
  • 如果文件夹中不存在数据库文件,qt中的sqlite支持至少会尝试创建一个新的db。

标签: c++ qt sqlite


【解决方案1】:

错误代码告诉您数据库未打开,因为您的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.  
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-26
    相关资源
    最近更新 更多