引言
我最近打算开一个新项目,会用到 Qt5 和 MySQL,没想到刚开始就遇到了问题...
代码语言:javascript复制QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QODBC QODBC3 QPSQL QPSQL7
大体意思就是,这个 QSqlDatabase 里面压根就没有 QMySQL 这个驱动,在我印象中 Qt 肯定是自带了 MySQL 驱动的,搜索了一下知道了原因,在老版本的 Qt 中(5.9 还是 5.12?)在 C:QtQt5.xx5.xxmingwxx_xxpluginssqldrivers
这个目录下,有 qsqlmysql.dll 这个文件,我这边当然是没有了...所以 MySQL 肯定连不上了,既然没有那只能自己编译了,不可能去网上找吧,不同版本的文件也不同。
注意:不同版本的 MySQL 里面包含不同的 libmysql.dll,不同的 libmysql.dll 必须和配套的 qsqlmysqld.dll (debug 版)或 qsqlmysql.dll(release 版) 一起才能正常工作!
Qt MySQL 驱动搭建
准备
编译前,请确认以下几点:
- 你的 Qt 安装时是否选择了 Sources。
- 你的 Qt 安装时是否选择的 64 位的 MinGW。
很多人应该没有选择 Sources 这一项,问题不大,在控制面板-> 卸载程序中找到 Qt 右键选择更改,自行添加 Sources 这个选项,具体做法可以借助搜索引擎,不怕麻烦的也可以直接重新按要求安装 Qt。
然后确定一下你的 C:QtQt5.14.25.14.2mingw73_64pluginssqldrivers
文件夹里是否如我描述的那样没有 qsqlmysql.dll 文件,然后再开始下一步。
编译
添加 Qt mingw 64 的环境变量,既然你都接触 Qt 了,环境变量对你来说应该是很熟悉的字眼了,就不说明怎么添加了,分别要添加的路径是:
代码语言:javascript复制C:Qt5.14.2mingw73_64bin
C:QtToolsmingw730_64bin
将以上路径替换成你自己的 Qt 安装路径即可,一定不要搞错了。
然后准备好你的 Qt 路径和 MySQL 路径,在终端中分别执行以下四行命令:
代码语言:javascript复制cd C:QtQt5.14.25.14.2Srcqtbasesrcpluginssqldrivers
qmake -- MYSQL_INCDIR="C:mysql-5.7.36-winx64include" MYSQL_LIBDIR="C:mysql-5.7.36-winx64lib"
mingw32-make
mingw32-make install
上面的路径依然是我自己的路径,请务必更改为自己的 Qt 和 MySQL 路径!
执行完第二行命令后,正常情况会输出一下内容:
代码语言:javascript复制Info: creating stash file C:QtQt5.14.25.14.2Srcqtbasesrcpluginssqldrivers.qmake.stash
Running configuration tests...
Checking for DB2 (IBM)... no
Checking for InterBase... no
Checking for MySQL... yes
Checking for OCI (Oracle)... no
Checking for ODBC... yes
Checking for PostgreSQL... no
Checking for SQLite (version 2)... no
Checking for TDS (Sybase)... no
Done running configuration tests.
Configure summary:
Qt Sql Drivers:
DB2 (IBM) .............................. no
InterBase .............................. no
MySql .................................. yes
OCI (Oracle) ........................... no
ODBC ................................... yes
PostgreSQL ............................. no
SQLite2 ................................ no
SQLite ................................. yes
Using system provided SQLite ......... no
TDS (Sybase) ........................... no
Qt is now configured for building. Just run 'mingw32-make'.
Once everything is built, you must run 'mingw32-make install'.
Qt will be installed into 'C:QtQt5.14.25.14.2mingw73_64'.
Prior to reconfiguration, make sure you remove any leftovers from
the previous build.
其中你需要关注你的 Checking for MySQL...后面和 Qt Sql Drivers 中的 MySql 是否都是 yes,如果不是,请检查你的路径和编译前的要求,无误后重新执行命令。
然后进行 make 和 install,中途可能会报一些 Warning,问题不大,只要命令执行完成后,你的 sqldrivers 文件夹中出现了如图所示的 qsqlmysql.dll 就代表编译完成了。
最后
将你的 libmysql.dll 放入你的 exe 文件所在目录,MySQL 数据库即可成功连接,项目最终打包上线时,也别忘了将 libmysql.dll 打包进去。
也可以编辑 qmake 的.pro 文件,在其中把该链接库加进去,但打包时还是需要自行添加 libmysql.dll:
代码语言:javascript复制LIBS = "C:mysql-5.7.36-winx64liblibmysql.dll"
#或添加
LIBS = -LC:mysql-5.7.36-winx64lib -llibmysql
libmysql.dll 在你的 MySQL 目录下的 lib 文件夹内,不同版本也是不能混用,这里推荐 MySQL5.7。
Henry 2021-12-13 未经授权 禁止转载
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。