转载,我自己用的是MYSQL8.0.21+QT MinGw64位 亲测成功
在使用Qt操作MySQL数据库过程中,使用Qt编写好连接MySQL数据库的的代码后,编译调试时报错QSqlDatabase: QMYSQL driver not loaded,意味着Qt应用程序与MySQL数据库连接失败。报错如下图所示:
("QSQLITE", "QODBC", "QODBC3", "QPSQL", "QPSQL7")
QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QODBC QODBC3 QPSQL QPSQL7
"Driver not loaded Driver not loaded"
- 1
- 2
- 3
- 4
本工程项目(解决方案)开发环境为:
(1)操作系统:Windows10
(2)MySQL版本为:8.0 MySql下载
(3)Qt版本为:5.14.1 Qt5.14.1下载
(4)QtCreator版本 为:4.11.0
分析”QSqlDatabase: QMYSQL driver not loaded”出现的原因
根据上图的报错提示,查阅官方文档,链接:https://doc.qt.io/qt-5/sql-driver.html#qmysql-for-mysql-4-and-higher,得到相关信息,如下
(1)Qt SQL模块使用驱动程序插件与不同的数据库api进行通信。
(2)支持的数据库如下:
Driver name | DBMS |
---|---|
QDB2 | IBM DB2 (version 7.1 and above) |
QIBASE | Borland InterBase |
QMYSQL | MySQL (version 5.0 and above) |
QOCI | Oracle Call Interface Driver |
QODBC | Open Database Connectivity (ODBC) - Microsoft SQL Server and other ODBC-compliant databases |
QPSQL | PostgreSQL (versions 7.3 and above) |
QSQLITE2 | SQLite version 2Note: obsolete since Qt 5.14 |
QSQLITE | SQLite version 3 |
QTDS | Sybase Adaptive ServerNote: obsolete since Qt 4.7 |
根据报错信息提示可用的drivers是: QSQLITE QODBC QODBC3 QPSQL QPSQL7,其中没有QMYSQL驱动。于是定位问题出现的原因是:缺少QMYSQL驱动。
编译MySQL驱动
(一)编译驱动
查阅计算机Qt安装路径:E:\ProgramData\Qt\Qt5.14.1\5.14.1\mingw73_64\plugins\sqldrivers 的sqldrivers插件,如下
发现其中没有与MySQL相关的驱动插件。
原来Qt5.14版本下不包含有驱动MySQL的驱动插件,那么就需要自己编译插件了。编译插件的过程如下:
1、使用QtCreator打开mysql.pro项目E:\ProgramData\Qt\Qt5.14.1\5.14.1\Src\qtbase\src\plugins\sqldrivers\mysql
打开项目文件(初始内容)如下
对照的修改为以下内容
给出代码,自行复制替换
style="position: unset;">TARGET = qsqlmysql
HEADERS += $$PWD/qsql_mysql_p.h
SOURCES += $$PWD/qsql_mysql.cpp $$PWD/main.cpp
#QMAKE_USE += mysql
OTHER_FILES += mysql.json
PLUGIN_CLASS_NAME = QMYSQLDriverPlugin
include(../qsqldriverbase.pri)
#该路径是的Mysql的头文件(include)路径
INCLUDEPATH +="E:\Program Files\MySQL\mysql-8.0.18-winx64\include"
#这是MySQl的库文件路径
LIBS +="E:\Program Files\MySQL\mysql-8.0.18-winx64\lib\libmysql.lib"
#为了方便查找,不妨增加一条语句,该语句用来指明编译后的结果输出的位置
DESTDIR = ../mysql/lib/
添加完之后编译程序(注意:此处使用的是MinGw64位)
编译成功后E:\ProgramData\Qt\Qt5.14.1\5.14.1\Src\qtbase\src\plugins\sqldrivers\mysql
目录下会多出一个lib目录
2、将这三个文件复制到E:\ProgramData\Qt\Qt5.14.1\5.14.1\mingw73_64\plugins\sqldrivers
中
(二)添加MySql扩展包
添加MySQL连接的扩展包libmysql.dll
和libmysql.lib
,这个包在我们的MySql安装目录E:\Program Files\MySQL\mysql-8.0.18-winx64\lib
中;
将扩展包添加到Qt安装目录E:\ProgramData\Qt\Qt5.14.1\5.14.1\mingw73_64\bin
中:
至此,Qt可以连接到MySQL数据库了。