如何在 Qt 应用程序的不同线程中创建和使用到 SQL 数据库的多个连接?
我读过文档说
只能在创建它的线程内使用连接。
如何分离不同线程中的连接?
如何在 Qt 应用程序的不同线程中创建和使用到 SQL 数据库的多个连接?
我读过文档说
只能在创建它的线程内使用连接。
如何分离不同线程中的连接?
您应该为每个线程创建一个数据库连接。在每个线程中使用QSqlDatabase::addDatabase()
不同的连接名称作为参数来创建QSqlDatabase
. 静态addDatabase
函数是线程安全的,可以在不同的线程中调用。
如何在使用 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 线程
遵循来自 VoidRealms @ youtube 的本教程。他对 sql 连接、模型和许多其他关于 Qt 的东西有很好的解释。
如果您看完后还需要更多帮助,我很乐意给您发送示例代码供您测试。