logo头像

技术引领生活!

Qt数据库removeDatabase注意事项

本文于2015天之前发表,文中内容可能已经过时。

起源:最近在研究一个项目, 其中用到了数据库,在数据库断开重连时会给出警告,经过一系列尝试终于搞定,网上找的方法大多数都是抄来抄去,很是无语…

警告示例

内容为:

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

如下图所示
图片

解决方案

  • 在每一次数据库打开时先把原有连接关闭,
  • 特别值得注意的是,在打开失败时也要关闭连接

核心代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
bool connectDataBase(QString dbName, QString type,
QString host, int port,
QString userName, QString passWd)
{
//关闭已有连接,将m_db重置
closeDataBase();

m_db = QSqlDatabase::addDatabase(type);

m_db.setHostName(host);
m_db.setPort(port);
m_db.setUserName(userName);
m_db.setPassword(passWd);
m_db.setDatabaseName(dbName);

if (!m_db.open()) {
closeDataBase();

return false;
}

return true;
}


void closeDataBase()
{
{
QString connectionName = m_db.connectionName();
m_db.close();

m_db = QSqlDatabase();
m_db.removeDatabase(connectionName);
}
}

PS

一般不会遇到该问题,除非是多次打开重连,一般在使用时只需要使用局部变量保存database就行了,不过笔者遇到的情况比较特殊,恩,效果还是不错的….

PPS

  • Qt遇到问题时,首先参照自带例子
  • 尝试到Stack Overflow上去找答案
  • 搜索引擎首推google,但是如果你不会科学上网还是将就用必应
支付宝打赏 微信打赏

您的支持是我前行的动力!