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

你可能感兴趣的:(Qt数据库)