原文链接导出Qt模块DLL给VC调用
起源:最近在研究一个项目, 其中用到了数据库,在数据库断开重连时会给出警告,经过一系列尝试终于搞定,网上找的方法大多数都是抄来抄去,很是无语…
警告示例
内容为:
QSqlDatabasePrivate::removeDatabase: connection 'qt_sql_default_connection' is still in use, all queries will cease to work
如下图所示
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bBoi87qq-1583668328277)(https://liusblog.top//photos/Qt数据库removeDatabase注意事项/警告.webp)]
解决方案
- 在每一次数据库打开时先把原有连接关闭,
- 特别值得注意的是,在打开失败时也要关闭连接
核心代码如下
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,但是如果你不会科学上网还是将就用必应吧