Qt配置mysql驱动
问题产生的环境:
- QT6.2.3(mingw_64)
- mysql5.7
- win10
- mingw_64,ninja,CMake(均采用qt自带的,在qt安装目录下的tool文件夹中,记得配置环境变量)
问题描述:
qt连接mysql数据库时报错:
QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available QSQLITE QMARIADB QODBC QPSQL
解决方案:
根据第二行报错信息可知该版本未安装mysql的驱动。查看qt安装目录下的(Qt\6.2.3\mingw_64\plugins\sqldrivers),确实没有qsqlmysql.dll动态链接库。
自己生成mysql驱动的动态链接库
-
下载qt6.2.3的源码
-
进入qt安装目录下的bin目录(E:\software\Qt\6.2.3\mingw_64\bin)
-
在该目录下进入cmd
-
执行如下命令
qt-cmake -G Ninja E:\software\Qt\6.0.4\Src\qtbase\src\plugins\sqldrivers -DMySQL_INCLUDE_DIR="F:\qtPro\mysqlconntect\include" -DMySQL_LIBRARY="F:\qtPro\mysqlconntect\lib\libmysql.lib" -DCMAKE_INSTALL_PREFIX="E:\software\Qt\6.2.3\mingw_64"
其中:
-
Ninja后面的为qt源代码中sqldrivers的目录
-
DMySQL_INCLUDE_DIR 为mysql中的include目录
-
DMySQL_LIBRARY 为 mysql中的libmysql.lib库
-
DCMAKE_INSTALL_PREFIX 可加可不加,我是加上了,官网上说的是最后安装dll的目录,可是我执行的时候并没有自动安装
注: 以上这两个库可以在mysql安装目录中找到,不过我的安装目录中有空格(网上说目录中有空格不行),因此我将这两个目录拷贝出来了。
成功执行后会显示如下信息:
Configure summary: Qt Sql Drivers: DB2 (IBM) .............................. no InterBase .............................. no MySql .................................. yes OCI (Oracle) ........................... no ODBC ................................... yes PostgreSQL ............................. no SQLite ................................. yes Using system provided SQLite ......... no -- Configuring done -- Generating done -- Build files have been written to: E:/software/Qt/6.2.3/mingw_64/bin
重点看:mysql后面有个yes.
-
-
上述命令执行没有报错的话,继续执行如下命令,进行手动编译
ninja
成功显示如下信息:
[22/22] Linking CXX shared module plugins\sqldrivers\qsqlite.dll
-
以上命令执行完进入生成的plugins/sqldrivers目录中就可以看到生成的qsqlmysql.dll文件,将这个文件放到qt安装目录下的plugins/sqldrivers文件夹中。
解决 QMYSQL driver not loaded 问题
进过上述操作,如果还是发现mysql驱动未加载,则将mysql安装目录下的mysql.dll放到qt安装目录下的bin目录当中,再次运行程序,mysql成功连接。
参考文献:
- CSDN,博客园等等上的大佬们的各种资料,由于太多而且实际解决我出现的这个问题,因此就不一一列出了。
- https://doc.qt.io/qt-6/sql-driver.html (qt官网,这个是qt6的配置驱动的说明,但是不全(也可能是我英语不好没看明白,例如最后使用ninja的编译官网就没写出,我是后面查看qt5手册发现有个make install 指令才想起来试试使用ninja命令的)
写在后面
不求能解决你的问题,但是希望能给到你启发。