qt 多线程访问数据库问题
2015-09-09 14:26
651 查看
Qt数据库由QSqlDatabase::addDatabase()生成的QSqlDatabase只能在创建它的线程中使用, 在多线程中共用连接或者在另外一个线程中创建query都是不支持的
这里的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
假设有如下代码: 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
相关文章推荐
- qt多线程编程之QThread
- QT最简单的打包发布技巧
- qt4解决中文乱码方法
- QtSoap传递多种类型参数
- QT 如何创建一个N行N列的控件
- 利用QT和libvlc写RTSP播放器
- QT5 动态链接库的创建和使用
- MAC下QT5 + Xcode 4.6.3 使用小结
- 用Qt开发第一个Hello World程序
- qt 多线程开发
- Qt安装后配置环境变量(Mac)
- Qt、Qte、Qtopia、Qvfb、Qpe概念区别
- 转:Qt 嵌入式开发环境搭建
- 学习Qt5(5)
- qt使用
- PyQt4 QPixmap.load/loadFromData 使用py2exe 打包后无法显示JPEG,gif等图片的问题
- 关于Qt在子线程中使用QMessageBox的折衷方法
- Qt设置窗口背景透明
- Qt 信号槽机制解析三 补充解释源代码
- QT之线程