Qt应用程序中多个线程中的SQL连接

时间:2015-04-21 08:12:50

标签: sql multithreading qt connection qsqldatabase

如何在Qt应用程序的不同线程中创建和使用多个SQL数据库连接?

我已阅读说

的文档
  

只能在创建连接的线程中使用连接。

如何在不同的线程中分隔连接?

3 个答案:

答案 0 :(得分:6)

您应该为每个线程创建一个数据库连接。使用具有不同连接名称的QSqlDatabase::addDatabase()作为每个线程中的参数来创建QSqlDatabase的实例。静态addDatabase函数是线程安全的,可以在不同的线程中调用。

答案 1 :(得分:2)

  

如何使用Qt在程序的不同线程中创建和使用sql db的多个连接?

// general worker init slot
DbWorker::init()
{
    this->db = QSqlDatabase::addDatabase("QSQLITE", dbName);
    db.setDatabaseName(dbPath);
    db.open();
}

在您的主要课程或任何地方,如:

DbWorker w1 = new DbWorker;
w1.setDbName("mem_db");
w1.setDbPath(":memory:");
QThread* t1 = new QThread(this);
w1->moveToThread(t1);
connect(t1, SIGNAL(started()), w1, SLOT(init()));
t1->start();

DbWorker w2 = new DbWorker;
w1.setDbName("file_db");
w1.setDbPath("~/usr/foo.db");
QThread* t2 = new QThread(this);
w1->moveToThread(t1);
connect(t2, SIGNAL(started()), w2, SLOT(init()));
t1->start();

所以你在thread1中有内存连接,在thread2中有文件连接。唯一要管理的是如果它是gui应用程序,则将数据提取到gui线程

答案 2 :(得分:-2)

关注VoidRealms @ youtube上的this教程。他对sql连接,模型以及关于Qt的许多其他内容有很好的解释。

如果您在观看后仍需要更多帮助,我很高兴为您发送示例代码供您测试。