Qt QSqlDatabase::removeDatabase()遇到的问题

在Qt中想要关闭数据库,并删除连接时发现出错,代码如下:

复制代码
1 if(db.isOpen())
2 {
3     QString connection;
4     connection = db.connectionName();
5     db.close();
6     db = QSqlDatabase();
7     db.removeDatabase(connection);
8 }
View Code
复制代码

运行时会出现如下警告:

QSqlDatabasePrivate::removeDatabase: connection ‘in_mem_db’ is still in use, all queries will cease to work.

按照Qt官方教程的说法,内容如下:

复制代码
Warning: There should be no open queries on the database connection when this function is called, otherwise a resource leak will occur.

Example:

 // 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
复制代码

故将代码修改成如下:

复制代码
1 if(db.isOpen()){db.close();}
2 QString connection;
3 {
4    connection = QSqlDatabase::database().connectionName();    
5 }
6 QSqlDatabase::removeDatabase(connection);
7 db = QSqlDatabase();
View Code
复制代码

问题得以解决!

posted @   羽……  阅读(653)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
历史上的今天:
2018-11-15 sizeof 与 strlen 的区别
点击右上角即可分享
微信分享提示