QSqlDatabasePrivate::database: requested database does not belong to the calling thread
·
问题描述
现象:
Qt在使用数据库时(本例以Sqlite为例),如创建数据库连接和使用数据库连接不在一个线程中,会出现如下报错:
QSqlDatabasePrivate::database: requested database does not belong to the calling thread
程序示例
创建数据库连接程序
//m_sqlDataBase全局变量
m_sqlDataBase = QSqlDatabase::addDatabase("QSQLITE");
m_sqlDataBase.setDatabaseName("test.db");
if(!m_sqlDataBase.open()){
qWarning()<<"open database error,"<<m_sqlDataBase.lastError();
}
使用数据库连接程序
if(!m_sqlDataBase.open()){
qWarning()<<"open database error,"<<m_sqlDataBase.lastError();
return;
}
QSqlQuery query;
if(!query.exec("select * from test")){ //该位置会报错
qWarning()<<"query error,"<<m_sqlDataBase.lastError();
return;
}
解决方案
在使用数据库连接时,QSqlQuery指定数据库连接,程序如下。
if(!m_sqlDataBase.open()){
qWarning()<<"open database error,"<<m_sqlDataBase.lastError();
return;
}
QString s1="select * from user";
QSqlQuery query(s1, m_sqlDataBase); //创建query时,指定数据库连接
if(!query.exec()){
qWarning()<<"query error,"<<m_sqlDataBase.lastError();
return;
}
说明
- QSqlDatabase不支持相同数据库使用多个数据库连接进行访问。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)