0
点赞
收藏
分享

微信扫一扫

QSqlDatabasePrivate::database: requested database does not belong to the calling thread

穿裙子的程序员 2022-03-11 阅读 67
qt数据库

问题描述

现象:

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

举报

相关推荐

0 条评论