QSqlQuery::exec: database not open

一、问题说明

在使用自定义数据连接后,发生了数据库连接成功,但是查询失败

Succeed to connect local database.
QSqlQuery::exec: database not open
QSqlError("", "Driver not loaded", "Driver not loaded")

如下问题代码

	QSqlDatabase::addDatabase("QSQLITE", localDBName);
	
	QSqlDatabase loaclDB = QSqlDatabase::database(localDBName);
    loaclDB.setDatabaseName("GraduationDesign.db");

    bool openflag = loaclDB.open();
    if (!openflag)
    {
        qDebug() << "Error: Failed to connect local database." << loaclDB.lastError();
    }
    else
    {
        qDebug() << "Succeed to connect local database." ;
    }

	//问题出在query
    QSqlQuery query;
    query.exec("SELECT UserInfo_TB.ID, UserInfo_TB.UserName FROM UserInfo_TB;");
    if(!query.exec())
    {
        qDebug()<<query.lastError();
    }
    else
    {
      //......
    }

二、解决办法

将 query 与特定的数据库绑定就能解决

 QSqlQuery query(loaclDB );

三、出现原因

我们参考的帮助文档里面的写法是这样的
在这里插入图片描述
实际这是QT系统为我们提供的一个便利,如果我们仅仅只有一个连接,那么系统默认将QSqlQuery关联到了默认的唯一的数据库连接上了(也就是默认的数据库)。也正因如此,我们遇上了QSqlQuery::exec: database not open 的问题。其根源就是我们忽视了 QT的系统默认数据库关联。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐