• 3164阅读
  • 6回复

[提问]removeDatabase: connection 'mysqlLocal' is still in use, all queries will cease to work. [复制链接]

上一主题 下一主题
离线介农酥
 

只看楼主 倒序阅读 楼主  发表于: 2019-06-20
回复本帖可获得10RMB金钱奖励!
每人最多可获奖1次,奖池剩余10RMB金钱 (中奖几率30%)
这条报警有办法消除吗?
自己网上看了,也没有消除。
本帖提到的人: @angelus
离线XChinux

只看该作者 1楼 发表于: 2019-06-20
在退出程序之前,调用removeDatabase()删除连接
在调用removeDatabase()删除连接之前,销毁该连接的所有数据库相关类实例
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线介农酥

只看该作者 2楼 发表于: 2019-06-20
怎么才算清掉所有相关的实例?
  1. #include "dialog.h"
  2. #include <QApplication>
  3. #include <QSqlDatabase>
  4. #include <QtDebug>
  5. #include <QSqlError>
  6. int main(int argc, char *argv[])
  7. {
  8.     QApplication a(argc, argv);
  9.     QSqlDatabase db;
  10.     db = QSqlDatabase::addDatabase("QMYSQL", "mysqlLocal");
  11.     db.setHostName("127.0.0.1");
  12.     db.setDatabaseName("express_plc");
  13.     db.setUserName("remoteuser");
  14.     db.setPassword("8ik,9ol");
  15.     if (!db.open()) {
  16.         qDebug() << "database open failure";
  17.         qDebug() << db.lastError().text();
  18.     } else {
  19.         qDebug() << "database open successful";
  20.     }
  21.     if (!db.open()) {
  22.         qDebug() << "database second open failure";
  23.         qDebug() << db.lastError().text();
  24.     } else {
  25.         qDebug() << "database second open successful";
  26.     }
  27.     db.close();
  28.     if (db.isValid())
  29.         qDebug("vaild!");
  30.     //db.removeDatabase("mysqlLocal");
  31.     {
  32.         QString name;
  33.         name = QSqlDatabase::database("mysqlLocal").connectionName();
  34.         QSqlDatabase::removeDatabase(name);
  35.     }
  36.     if (db.isValid())
  37.         qDebug("still vaild!");
  38.     return a.exec();
  39. }
输出:
database open successful
database second open successful
vaild!
QSqlDatabasePrivate::removeDatabase: connection 'mysqlLocal' is still in use, all queries will cease to work.

我上面的代码,db都没有用来查询,我也关闭了,可是还报,真的不知道,怎样才算清掉所有相关的实例。
---------------------------------------------------------------------------------------------------------------------------------------------------------
离线XChinux

只看该作者 3楼 发表于: 2019-06-20
回帖奖励+ 10
比如db这个实例对象需要销毁
所以,你上面的代码,要么db改成指针形式,在调用removeDatabases()之前delete db
或者,让db作用域在调用removeDatabases()之前失效。
比如
{
      QSqlDatabase db;
      .....
}
QSqlDatabase::removeDatabases(....);
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线spygg

只看该作者 4楼 发表于: 2019-06-24
最近刚好遇到这个问题,几经尝试终于解决详见我的博客
我的博客
签名就是这么浪
离线介农酥

只看该作者 5楼 发表于: 2019-07-01
谢谢!
离线介农酥

只看该作者 6楼 发表于: 2019-07-01
回 XChinux 的帖子
XChinux:比如db这个实例对象需要销毁
所以,你上面的代码,要么db改成指针形式,在调用removeDatabases()之前delete db
或者,让db作用域在调用removeDatabases()之前失效。
比如
{
....... (2019-06-20 15:24) 

之前指针都不会用,基础不扎实啊,感谢大神!
快速回复
限100 字节
 
上一个 下一个