相信很多朋友在用Sqlite时,当程序退出时会在控制台报出: QSqlDatabasePrivate::removeDatabase: connection 'Connection' is still in use, all queries will cease to work
之类的错误。
这个问题在Qt的帮助手册“removeDatabase”一页中给出解决方案。
但是说的很不清楚。
其实这个问题的本质是: QSqlDatabase这个类会对 DataBase变量进行“引用计数”(搞Jave或C#的朋友应该很清楚了)
这样,当你在数据库操作类中定义 一个 QSqlDatabase mXXX;的成员变量时,并且通过
mXXX = QSqlDatabase::addDatabase(tr("QSQLITE"), mStrDBName); 赋予其有效值时 类QSqlDatabase会对 mXXX进行引用计数
问题就来了,在数据库操作对象的析构函数中, 通过调用 QSqlDatabase::removeDatabase(mStrDBName);删除该数据库时,
数据库的引用计数并不是0, 当对象彻底删除,释放其栈上的mXXX成员时,呵呵,此时mXXX 已经无效了,
接着就哗啦啦警告。
解决方案: 不要定义 QSqlDatabase mXXX; 成员变量,在所有需要的地方用 : QSqlDatabase::database(mStrDBName) 替代,
简单有效,我测试过。