QT使用多线程执行操作数据库时,需要拿到数据库的实例,才能正确插入、删除表中的数据。否则数据库执行语句无效,也不报错,自己复制打印的SQL语句却能操作成功

#定义单例数据库
static QSqlDatabase m_db;
#数据库实例
QSqlDatabase Database::GetInstance()
{
    return m_db;
}
#在多线程中使用query
QSqlDatabase db = Database::GetInstance();
QSqlQuery query(db);
strQuery = "insert into xxxx"#具体sql语句
query.exec(strQuery);

  • 11
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用 Qt 的 QSqlDatabase 和 QSqlQuery 类来执行 MySQL 数据库插入操作。在多线程环境下,需要注意数据库连接的线程安全性,可以使用 QMutex 或 QReadWriteLock 来保证线程安全。以下是一个示例代码: ```cpp #include <QtSql> #include <QThread> class DatabaseWorker : public QObject { Q_OBJECT public: DatabaseWorker(QObject *parent = nullptr) : QObject(parent) {} public slots: void insertData(const QString &name, int age) { QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL"); db.setHostName("localhost"); db.setDatabaseName("mydatabase"); db.setUserName("myusername"); db.setPassword("mypassword"); if (!db.open()) { qWarning() << "Failed to connect to database:" << db.lastError().text(); return; } QSqlQuery query(db); query.prepare("INSERT INTO mytable (name, age) VALUES (:name, :age)"); query.bindValue(":name", name); query.bindValue(":age", age); if (!query.exec()) { qWarning() << "Failed to insert data:" << query.lastError().text(); return; } qDebug() << "Data inserted successfully:" << name << age; } }; int main(int argc, char *argv[]) { QCoreApplication app(argc, argv); DatabaseWorker worker; QThread thread; worker.moveToThread(&thread); thread.start(); QObject::connect(&app, &QCoreApplication::aboutToQuit, &thread, &QThread::quit); QObject::connect(&worker, &DatabaseWorker::insertData, &worker, &DatabaseWorker::insertData, Qt::QueuedConnection); worker.insertData("Alice", 20); worker.insertData("Bob", 30); worker.insertData("Charlie", 40); return app.exec(); } ``` 这个示例代码演示了如何在多线程环境下执行 MySQL 数据库插入操作。在主线程创建一个 DatabaseWorker 对象,并将其移动到一个新的线程。然后,通过信号槽机制将插入数据的请求发送到 DatabaseWorker 对象执行。在 DatabaseWorker 对象,首先创建一个 QSqlDatabase 对象,并设置连接参数。然后,创建一个 QSqlQuery 对象,并使用 prepare() 方法准备 SQL 语句。接着,使用 bindValue() 方法绑定参数,并执行 SQL 语句。最后,通过 qDebug() 输出插入数据的结果。注意,这里使用Qt::QueuedConnection 来确保插入数据的请求在新线程执行

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值