使用qt再线程中查询数据库
时间: 2023-08-21 16:05:03 浏览: 148
Qt单例模式实现Mysql数据库的链接,增加,删除,修改,查询
在 Qt 中,可以使用 QThread 类来创建线程,并使用 QSqlDatabase 类来连接和查询数据库。下面是一个简单的示例,展示了如何在线程中查询数据库:
```cpp
#include <QThread>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QMutex>
#include <QMutexLocker>
class DbWorkerThread : public QThread
{
public:
DbWorkerThread(QObject *parent = nullptr) : QThread(parent)
{
// 建立数据库连接
db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("localhost");
db.setDatabaseName("mydatabase");
db.setUserName("root");
db.setPassword("root");
if (!db.open()) {
qDebug() << "Failed to open database connection!";
}
}
void run() override
{
// 在线程中查询数据
QMutexLocker locker(&mutex);
QSqlQuery query(db);
query.exec("SELECT * FROM mytable");
while (query.next()) {
QString name = query.value("name").toString();
int age = query.value("age").toInt();
// 处理查询结果
}
}
private:
QSqlDatabase db;
QMutex mutex;
};
// 使用示例
DbWorkerThread *worker = new DbWorkerThread(this);
worker->start();
```
在这个例子中,我们创建了一个名为 `DbWorkerThread` 的类来查询数据库。在 `run()` 函数中,我们使用 `QSqlDatabase` 类建立数据库连接,并使用 `QSqlQuery` 类来执行查询语句。在处理查询结果时,我们可以将数据存储在变量中,或者将其发送给主线程进行处理。
需要注意的是,在使用 QSqlDatabase 类连接数据库时,需要确保在每个线程中都有一个独立的数据库连接。可以使用 `QSqlDatabase::addDatabase()` 函数来创建多个连接,然后在每个线程中使用不同的连接来查询数据库。同时,也需要特别注意线程安全问题,以避免多个线程同时访问数据库造成的问题。可以使用 `QMutex` 等工具来保护共享数据。
阅读全文