连接MySQL数据库时报错:
QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QODBC QODBC3 QPSQL QPSQL7
有上述报错是因为使用的qt版本不自带mysql的驱动,需要手动编译。可以检查一下D:\pawf\Program\dev\cpp\Qt\5.15.2\mingw81_64\plugins\sqldrivers
目录中是否有mysql的驱动文件,如下图所示:
注意:不同版本的MySQL里面包含不同的libmysql.dll,不同的libmysql.dll必须和配套的qsqlmysqld.dll(debug版)或qsqlmysql.dll(release版)一起才能正常工作!
进入到D:\pawf\Program\dev\cpp\Qt\5.15.2\Src\qtbase\src\plugins\sqldrivers\mysql
目录中,使用qtcreator
打开mysql.pro
文件。
进行下列修改:
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的头文件路径
INCLUDEPATH += "D:\pawf\Program\dev\MySQL\MySQL Server 8.0\include"
//这是MySQL的库文件路径
LIBS += "D:\pawf\Program\dev\MySQL\MySQL Server 8.0\lib/libmysql.lib"
//为了方便查找,不妨增加一条语句,该语句用来指明编译后的结果输出的位置
DESTDIR = ../mysql/lib/
QT = core core-private sql-private
# For QMAKE_USE in the parent projects.
# include($$shadowed($$PWD)/qtsqldrivers-config.pri)
include(./configure.pri)
PLUGIN_TYPE = sqldrivers
load(qt_plugin)
DEFINES += QT_NO_CAST_TO_ASCII QT_NO_CAST_FROM_ASCII
构建后在编译的输出信息中会显示生成的驱动文件的路径:
将qsqlmysql.dll
和qsqlmysql.dll.debug
复制到D:\pawf\Program\dev\cpp\Qt\5.15.2\mingw81_64\plugins\sqldrivers
目录中即可。
注意:需要将MySQL的D:\pawf\Program\dev\MySQL\MySQL Server 8.0\lib
目录中的libmysql.dll添加到可执行文件的目录中,如果出现类似于没有加载mysql驱动但是又能够找到mysql的驱动这种错误,就说明缺少这个文件。当然,不添加也行,可以通过设置环境变量的方法来使可执行文件能够找到该文件,但是在打包的时候是不会自动添加这个文件的,所以一定不要忘记手动添加该文件到程序目录中。
按照上述内容去做的话,使用qtcreator进行开发应该就没问题了,但是在使用clion进行开发时还是会有问题,会出现类似于mysql驱动未加载,没有可用驱动这种报错。我在不断尝试中找到了一个解决方法:
先将Release构建生成的程序使用windeployqt
进行打包。
可以发现会有sqldrivers这么一个目录,里面是程序需要用到的一些数据库驱动,将这个目录和libmysql.dll文件添加到可执行程序所在的目录中,即可正确连接数据库。至于具体的原因,我还不太了解,但这确实是一个方法,可以在clion中运行程序时正常连接到数据库。
标签:Qt,数据库,MySQL,dev,dll,Program,pawf,mysql From: https://www.cnblogs.com/pawf/p/17966030