一、问题描述:
在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);