qt多线程适用mysql_qt 多线程访问数据库问题

叁歲伎倆 2023-01-12 07:51 346阅读 0赞

Qt数据库由QSqlDatabase::addDatabase()生成的QSqlDatabase只能在创建它的线程中使用, 在多线程中共用连接或者在另外一个线程中创建query都是不支持的

假设有如下代码:

bool openDatabase()

{

QSqlDatabase db;

QString connectionName = “sqlite”;

db = QSqlDatabase::addDatabase(“QSQLITE”, connectionName);

db.setDatabaseName(“/jyxtec.db”);

if (db.open()) return true;

else return false;

}

void testQuery()

{

QSqlQuery query(QSqlDatabase::database(“sqlite”));

query.exec(“SELECT * from t_test”);

}

这里的testQuery()是不支持多线程调用的,只能在调用OpenDatabase()的线程中使用.否则很容易段错误。

解决方法有两种:

1)每个调用testQuery的线程中创建不同connectionName的QSqlDatabase

比如线程A

QSqlDatabase::addDatabase(“QSQLITE”, “A”);

QSqlQuery query(QSqlDatabase::database(“A”));

线程B

QSqlDatabase::addDatabase(“QSQLITE”, “B”);

QSqlQuery query(QSqlDatabase::database(“B”));

2)实现一个数据库线程池,创建N个不同connectionName的QSqlDatabase,所有的query命令都放到这个线程池中处理。

在此感谢网络大牛

参考地址:

http://blog.csdn.net/goldenhawking/article/details/10811409

http://blog.chinaunix.net/uid-20680966-id-4779621.html

发表评论

表情:
评论列表 (有 0 条评论,346人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Qt线

    今天学习Qt的多线程,在学习多线程主要是两个方面。一是多线程的基础概念,二是多线程的同步,三是怎么和主线程进行通讯。 三.Qt 的应用程序开始执行的时候,只有一个主线程在运行

    相关 QT线

    QT多线程,QT4.7之前是承继 QThread 的方式,比较简单,而 QT5之后,使用了信号和槽的方式,比较灵活。(版本信息可能有误) 下面是对QT线程信息的注意事项

    相关 Qt线使用数据库

    【写在前面】 最近在多线程环境中使用数据库,结果出现了一些比较有意思的问题。 然后也找到了原因和解决的办法,这里记录、分享一下过程。 ----------------