Qt使用QSqlDatabase remoeDatabase()连接提示仍在使用解决方案
  yQAl4kecrO8W 2023年12月22日 34 0


问题描述

调用QSqlDatabase的removeDatabase函数的时候,出现了如下错误

QSqlDatabasePrivate::removeDatabase: connection '05465461654654' is still in use, all queries will cease to work

官方示例

[static] void QSqlDatabase::removeDatabase(const QString &connectionName)
Removes the database connection connectionName from the list of database connections.
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

To remove the default connection, which may have been created with a call to addDatabase() not specifying a connection name, you can retrieve the default connection name by calling connectionName() on the database returned by database(). Note that if a default database hasn't been created an invalid database will be returned.
Note: This function is thread-safe.

解决方案

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


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年12月22日 0

暂无评论

推荐阅读
yQAl4kecrO8W