3

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

我读过文档说

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

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

4

3 回答 3

6

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

于 2015-04-21T09:24:18.340 回答
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 线程

于 2015-04-21T08:35:07.820 回答
-2

遵循来自 VoidRealms @ youtube 的本教程。他对 sql 连接、模型和许多其他关于 Qt 的东西有很好的解释。

如果您看完后还需要更多帮助,我很乐意给您发送示例代码供您测试。

于 2015-04-21T16:07:11.317 回答