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,但是如果你不會科學上網還是將就用必應
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章