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
一起才能正常工作