qt多线程写入sqlite数据库代码
时间: 2024-10-09 22:01:25 浏览: 52
QT中sqlite多线程操作4个注意问题
在Qt中,使用QThread和Sqlite来处理多线程写入SQLite数据库的基本步骤如下:
```cpp
#include <QObject>
#include <QThread>
#include <QSqlDatabase>
#include <QSqlError>
class WorkerThread : public QObject
{
Q_OBJECT
public:
explicit WorkerThread(QObject* parent = nullptr) : QObject(parent)
{
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("your_database_file.db"); // 替换为你的SQLite数据库文件名
if (!db.open()) {
qDebug() << "Failed to open database: " << db.lastError().text();
return;
}
connect(&db, &QSqlDatabase::error,
this, &WorkerThread::handleError);
}
private slots:
void writeData(const QString& data)
{
QSqlQuery query(db);
query.prepare("INSERT INTO your_table (column_name) VALUES (?)"); // 替换为你的表和列名
query.addBindValue(data);
if (!query.exec()) {
qDebug() << "Failed to insert data: " << query.lastError().text();
} else {
qDebug() << "Data inserted successfully";
}
}
signals:
void finished();
private:
QSqlDatabase db;
};
// 主线程
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
WorkerThread worker;
thread = new QThread;
worker.moveToThread(thread);
connect(&worker, &WorkerThread::finished, &thread, &QThread::quit);
connect(&thread, &QThread::started, &worker, &WorkerThread::writeData); // 发送数据到工人线程
// 在主线程里模拟数据生成并传递给工人线程
for (int i = 0; i < 10; ++i) {
QString data = "data" + QByteArray::number(i);
emit worker.writeData(data); // 使用信号槽连接将数据发送到工人线程
}
thread.start(); // 启动工人线程
thread.quit(); // 线程完成后退出
thread.wait(); // 等待线程完成
return app.exec();
}
```
在这个例子中,`WorkerThread`是一个单独的线程,负责插入数据到SQLite数据库。`main`函数创建了一个工作线程,并在其中创建一个`QSqlDatabase`实例,然后通过信号槽连接将数据发送到`writeData`方法。记得替换`your_database_file.db`和数据库表名,以及列名。
阅读全文