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);

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值