码迷,mamicode.com
首页 > 数据库 > 详细

qt数据库多线程问题的解决

时间:2015-01-24 15:53:02      阅读:132      评论:0      收藏:0      [点我收藏+]

标签:

Qt数据库由QSqlDatabase::addDatabase()生成的QSqlDatabase只能在创建它的线程中使用, 在多线程中共用连接或者在另外一个线程中创建query都是不支持的
几乎国内没有文章提到这个问题,这几天在做数据库压力测试时遇到了

假设有如下代码:
<span style="font-size:14px;">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");
    // ..........
}
</span>


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

作者:帅得不敢出门  程序员群:31843264

qt数据库多线程问题的解决

标签:

原文地址:http://blog.csdn.net/zmlovelx/article/details/43085779

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!