zoukankan      html  css  js  c++  java
  • qt数据库多线程问题的解决(QSqlDatabase只能在创建它的线程中使用)

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

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

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

  • 相关阅读:
    Homebrew替换源
    Tensorboard on Server
    locale.Error: unsupported locale setting(ViZDoom执行错误)
    Python之从numpy.array保存图片
    医院汇总
    Ubuntu上CUDA环境搭建
    图片
    高斯分布与Gamma分布关系
    Python之2维list转置、旋转及其简单应用
    如何让 zend studio 10 识别 Phalcon语法并且进行语法提示
  • 原文地址:https://www.cnblogs.com/findumars/p/5595571.html
Copyright © 2011-2022 走看看