Qt移除数据库removeDatabase()时发出警告

一、问题描述:

在Qt中移除数据库连接,调用removeDatabase的时候,新手可能会遇到下面的警告文字:

QSqlDatabasePrivate::removeDatabase: connection 'XXX' is still in use, all queries will cease to work.

二、为什么会出现这样的情况呢?

很显然嘛,它都告诉你了,你的数据库连接还在使用中。可能你会疑惑,我已经close我的connection了,查询语句也执行完了,为什么说我还在使用这个连接。

这里说的还在使用中,是说你的程序中还有这个连接,无论这个连接是open还是close。想想你当初add database的时候是把它add到哪里?!!!

三、如何解决呢?

官方文档已经说的很清楚了。

// WRONG
QSqlDatabase db = QSqlDatabase::database("sales");
QSqlQuery query("SELECT NAME, DOB FROM EMPLOYEES", db);
QSqlDatabase::removeDatabase("sales"); // will output a warning
// "db" is now a dangling invalid database connection,
// "query" contains an invalid result set

The correct way to do it:
{
QSqlDatabase db = QSqlDatabase::database("sales");
QSqlQuery query("SELECT NAME, DOB FROM EMPLOYEES", db);
}
// Both "db" and "query" are destroyed because they are out of scope
QSqlDatabase::removeDatabase("sales"); // correct


//也就是说,你在removeDatabase之前,要确保query和database都已经被删除掉了。


四、我的做法:

QString connection;

connection=db->connectionName();

delete(db);

QSqlDatabase::removeDatabase(connection);

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
以下是一个基于Qt数据库访问工具类的示例代码: ```cpp #include <QtSql/QSqlDatabase> #include <QtSql/QSqlQuery> #include <QString> #include <QVariant> #include <QDebug> class DatabaseHelper { public: DatabaseHelper() {} // 连接数据库 bool connect(const QString& host, const QString& databaseName, const QString& username, const QString& password) { QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL"); db.setHostName(host); db.setDatabaseName(databaseName); db.setUserName(username); db.setPassword(password); return db.open(); } // 查询数据 QVariantList query(const QString& sql, const QVariantList& params) { QVariantList result; QSqlQuery query; query.prepare(sql); for (int i = 0; i < params.size(); ++i) { query.addBindValue(params[i]); } if (query.exec()) { while (query.next()) { for (int i = 0; i < query.record().count(); ++i) { result.append(query.value(i)); } } } else { qDebug() << "Error executing query:" << sql << query.lastError().text(); } return result; } // 更新数据 bool update(const QString& sql, const QVariantList& params) { QSqlQuery query; query.prepare(sql); for (int i = 0; i < params.size(); ++i) { query.addBindValue(params[i]); } if (query.exec()) { return true; } else { qDebug() << "Error executing query:" << sql << query.lastError().text(); return false; } } // 断开数据库连接 void disconnect() { QSqlDatabase::database().close(); QSqlDatabase::removeDatabase(QSqlDatabase::defaultConnection); } }; ``` 在上面的代码中,我们使用QtSql库来连接数据库、查询数据和更新数据。在connect()方法中,我们通过QSqlDatabase类来设置数据库连接信息,并调用open()方法来连接数据库。在query()方法中,我们使用QSqlQuery类来执行查询语句,并将查询结果保存在QVariantList中返回。在update()方法中,我们使用QSqlQuery类来执行更新语句,并返回执行结果。在disconnect()方法中,我们使用QSqlDatabase类来关闭数据库连接移除数据库连接
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值