t数据库removeDatabase注意事项

原文链接导出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,但是如果你不会科学上网还是将就用必应
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值