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

当Qt应用程序在不同线程中创建和使用数据库连接时,可能会遇到`QSqlDatabasePrivate::database:requesteddatabasedoesnotbelongtothecallingthread`的错误。解决办法是在使用QSqlQuery时指定数据库连接,确保在同一线程内操作。QSqlDatabase不支持同一数据库的多个连接并行访问。
摘要由CSDN通过智能技术生成

问题描述

现象:

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不支持相同数据库使用多个数据库连接进行访问。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值