• 5018阅读
  • 1回复

关于Sqlite数据库删除时的 警告 [复制链接]

上一主题 下一主题
离线wanglehui_12
 

只看楼主 倒序阅读 楼主  发表于: 2009-12-23
— 本帖被 XChinux 从 General Qt Programming 移动到本区(2011-01-02) —
相信很多朋友在用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) 替代,

简单有效,我测试过。

离线daily8321

只看该作者 1楼 发表于: 2009-12-23
谢谢分享。
快速回复
限100 字节
 
上一个 下一个