失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > qt多线程适用mysql_qt 多线程访问数据库问题

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

时间:2022-09-23 02:12:41

相关推荐

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

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命令都放到这个线程池中处理。

在此感谢网络大牛

参考地址:

/goldenhawking/article/details/10811409

/uid-20680966-id-4779621.html

如果觉得《qt多线程适用mysql_qt 多线程访问数据库问题》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。