QT 数据库报:QSqlDatabasePrivate::database: requested database does not belong to the calling thread.

这个问题困扰了一天,网上查了很多资料,解决方法如下;将:

QSqlQuery query;
    query.exec(QString("select * from LCChamber where IsIdle=1 "));
    query.next();

修改成:

        QSqlQuery query(QString("select * from LCChamber where IsIdle=1 "),_db);
        query.exec();

但是还是出现了以上问题。如果同一个线程类,有多个对象还是会提示上面这个问题,解决方案如下:

1.找到原因,提示的是DB不能在不同的线程中使用,那我们就可以在析构函数中将其关闭和移除

        StateMachine::~StateMachine()
{
    _db.close();
    QSqlDatabase::removeDatabase("mysql");
    qDebug()<<"~StateMachine";
}
 

2.有些没有没有走析构函数,是因为我们定义的是动态分配空间,该空间在线程结束时并没有释放,只有使用delete才会释放空间并且调用析构函数,所以我们将动态指针修改成静态就行。QT的析构函数还是没有android的好用,不到万不得已最好不使用。

before:StateMachine  *_stateMachine = new StateMachine();

after:StateMachine _stateMachine;

3.最后还是不稳定,只能设置为全局变量。

参考(43条消息) QSqlDatabasePrivate::database: requested database does not belong to the calling thread_tony_xj的博客-优快云博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值