Qt小技巧14.Qt5.12.x编译Mysql插件驱动

1 遇到的问题

Qt后面的版本都没有直接带Mysql插件驱动了,应该是协议的原因,需要我们自己手动编译下,默认是这样子的:

打印下QSqlDatabase::drivers()结果如下:

("QSQLITE", "QODBC", "QODBC3", "QPSQL", "QPSQL7")

很显然,默认是不包含Mysql的插件驱动。
如果使用QSqlDatabase::addDatabase("QMYSQL")去加载插件,就会报下面的错误:

QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QODBC QODBC3 QPSQL QPSQL7

这个错误是不是很经典,网上也有很多编译插件的教程,但是居然没有一篇文章是完全能够解决问题的,一定要综合多篇文章一起才行,所以还得要自己多动动手才行,下面我们来看看解决办法。

2 解决办法

2.1 下载源码

如果安装Qt时勾选了源码,这步就可忽略,但是大多数人安装时是没有勾选的,可以自己去下载一下:

附加地址https://download.qt.io/archive/qt/5.12/5.12.6/submodules/
这里根据自己的版本下载即可。

2.2 解压源码

如果安装Qt时勾选了源码,这步也可忽略,这里只提一点,解压时一定要整个目录一起解压,不然会影响后面的配置:

解压目录自己可以随便指定,一定要全部一起解压,我这里解压到了D:/QtPro目录下。

2.3 打开mysql.pro工程

首先打开工程文件:

打开后无非会遇到下面两种错误:

Project ERROR: Library 'mysql' is not defined.
Cannot read D:/qtsqldrivers-config.pri: No such file or directory

为了解决这个问题,接下来我们修改下配置。

2.4 修改工程文件

修改mysql.pro文件如下:

这里额外提示下,如果本地没有安装mysql数据库,可以下载对应的zip包,里面有对应的头文件和库文件,例如我这里服务器的版本是mysql-5.7.9,所以我下载的版本是mysql-5.7.9-winx64.zip,并解压到了D:/Program目录下:

然后,修改qsqldriverbase.pri文件如下:

好了,上面提到的两个错误到这里就解决了,下面开始编译。

2.5 编译一下

编译完成后,会在指定的build目录下生成插件驱动:

2.6 部署一下

首先将编译生成的mysql插件驱动复制到sqldrivers目录下:

然后再将Mysql驱动复制到Qt安装目录bin目录下:

3 验证一下

首先使用QSqlDatabase::drivers()打印下:

("QSQLITE", "QMYSQL", "QMYSQL3", "QODBC", "QODBC3", "QPSQL", "QPSQL7")

很显然,Mysql插件驱动已经安装成功了。
下面测试下能不能连接到数据库:

    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    db.setHostName("192.168.10.5");
    db.setUserName("root");
    db.setPassword("123456");
    db.setPort(3306);
    qDebug() << db.open() << db.lastError().text();

结果打印如下:

好啦,搞定!此方法应该对其他版本也适用,需要自行去测试。
最后提一下,我们编译的插件qsqlmysql.dll是依赖于Mysql驱动libmysql.dll的,两者缺一不可,插件就像是中间转换层一样,会对Mysql驱动进行适配,直接调用是不行的。

posted @ 2022-02-22 20:05  Qt小罗  阅读(1294)  评论(0编辑  收藏  举报