原文鏈接導出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,但是如果你不會科學上網還是將就用必應吧