在Qt应用程序中如何创建并使用多个与SQL数据库的连接?
我已经阅读了文档,其中提到:
一个连接只能在创建它的线程中使用。
那么如何在不同线程中分离出多个连接呢?
在Qt应用程序中如何创建并使用多个与SQL数据库的连接?
我已经阅读了文档,其中提到:
一个连接只能在创建它的线程中使用。
那么如何在不同线程中分离出多个连接呢?
每个线程都应该创建一个数据库连接。在每个线程中使用不同的连接名称作为参数,使用QSqlDatabase::addDatabase()
为每个线程创建QSqlDatabase
实例。静态的addDatabase
函数是线程安全的,并且可以在不同的线程中调用。
QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL", __func__);
- Ilya Matveychikov// 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();
你在线程1中有内存连接,在线程2中有文件连接。唯一需要管理的是,如果是GUI应用程序,则将数据提取到GUI线程。
请跟随VoidRealms在YouTube上的this教程。他对SQL连接、模型以及关于Qt的许多其他内容都有很好的解释。
如果您在观看后仍需要更多帮助,我很乐意为您发送一个样例代码供您测试。