Qt5在連接MySQL數據庫時會出現一些問題,本文介紹兩種最常見的問題,以及其相對簡單的解決辦法。
Qt5數據庫支持列表里沒有MySQL
輸入以下代碼查看支持的數據庫類型
//打印支持的數據庫類型
qDebug()<<QSqlDatabase::drivers();
現象:
可以發現支持的數據庫列表里沒有"QMYSQL",打開Qt5.X.X\5.X.X\mingwXX_XX\plugins\sqldrivers
會發現缺少下面兩個文件:
原因:較低版本的Qt5是不帶MySQL驅動的,也就是沒有qsqlmysql.dll
和qsqlmysqld.dll
這兩個文件,需要自己手動編譯進行添加。
解決辦法1:從Qt5.8開始(具體有待考證)后就默認自帶MySQL驅動了(目前更新最快的5.1.4是不帶MySQL驅動的),所以大家可以自己升級到5.8以上的版本,問題就可以解決,推薦5.9這個長期支持版本。
解決辦法2:自己手動進行編譯驅動文件或者下載對應的別人編譯好的驅動文件添加進去。編譯可參考官網sql-driver
QMYSQL drive not loaded
輸入以下代碼進行數據庫連接
//連接數據庫
QSqlDatabase db=QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("localhost");
db.setUserName("root");
db.setPassword("hll523811");
db.setDatabaseName("db");
if(db.open()==false){
qDebug()<<"打開失敗"<<db.lastError().text();
}
現象:
出現經典問題:QMYSQL drive not loaded
原因:Qt5.X.X\5.X.X\mingwXX_XX\bin\
缺少MySQL的lib文件,所以不可用
解決方法:打開mysql-X.X.XX-winxXX\lib
復制libmysql.dll
到Qt5.X.X\5.X.X\mingwXX_XX\bin\
即可
注意:
1. libmysql.dll
文件必須匹配相應使用的MySQL版本
2. 32位QT復制的是32位的MySQL里的libmysql.dll
,64位也對應64位
3. 不同版本的MySQL里面包含不同的libmysql.dll
, 不同的libmysql.dll
必須和配套的qsqlmysqld.dll
qsqlmysql.dll
一起才能正常工作