在花了整整两天的时间解决这个问题以后,我整理了一下目前网上主要的方法,同时附上我自己的解决方法和有关这个问题的想法。
网上很多的办法,基本上是同一个套路:
方法一:(编译mysql.pro)
1、打开qt源码(在安装qt的时候勾选source才会有,如果已经安装了不行卸载重装的话可以直接去官网下载源码http://download.qt.io/archive/qt/5.12/5.12.0/submodules/ 我的是5.12.0版本,改成自己的版本号即可),下载解压到qt文件夹内D:\Qt\Qt5\5.12.0\Src\qt-everywhere-src-5.12.0\qtbase\src\plugins\sqldrivers\mysql ,使用Qt Creator打开其中的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的头文件(include)路径
INCLUDEPATH +="D:\MySQL\mysql-5.7.34-win32\include"
#这是MySQl的库文件路径
LIBS +="D:\MySQL\mysql-5.7.34-win32\lib\libmysql.lib"
#为了方便查找,不妨增加一条语句,该语句用来指明编译后的结果输出的位置
DESTDIR = ../mysql/lib/
注意:QMAKE_USE += mysql需要注释掉,不然会报错
路径需要修改成自己的mysql安装的文件路径
修改完成后进行构建,就可以在D:\Qt\Qt5\5.12.0\Src\qt-everywhere-src-5.12.0\qtbase\src\plugins\sqldrivers\mysql\lib下找到编译生成的文件qmysql.dll和qmysqld.dll。
2、将生成的qmysql.dll和qmysqld.dll拷贝到D:\Qt\Qt5\5.12.0\msvc2017\plugins\sqldrivers内(我的是msvc,MinGw同理)就是编译器的文件夹,拷贝D:\MySQL\mysql-5.7.34-win32\lib(mysql安装文件夹下的lib文件夹)中的libmysql.lib和libmysql.dll到D:\Qt\Qt5\5.12.0\msvc2017\bin下,重新启动项目,查看是否成功。
这种方法总而言之就是,需要将msvc或者mingw中需要的qmysql.dll和qmysqld.dll同mysql中的libmysql.lib同版本,编译的目的就是这个。
方法二:(构建mysql-connector-c)
1、下载mysql-connector-c的zip压缩包,网址:https://downloads.mysql.com/archives/c-c/,直接解压,将lib目录下的libmysql.dll拷贝到D:\Qt\Qt5\5.12.0\msvc2017\bin下
2、将libmysql.dll拷贝到release文件夹.exe文件同级目录下
这种方法可以考虑试试,毕竟网上最主流的还是方法一,当初看到不一样的时候也以为是能够解决的方法。
方法三:(检查、删除、重构)
这个方法是我亲测可以成功的,不过还是建议在上面两种方法都试过没有用的时候进行尝试。(仅供参考)
1、检查:
仔细检查自己连接mysql的配置文件或者代码中相应的登录名称、密码、ip等等是否正确,mysql服务是否开启,确保不是因为自己的马虎造成问题。
2、删除:
我是将项目生成的release文件(debug文件同理),先拷贝了一份保存(保险起见还是留存一份),然后将原来的release文件夹中的所有内容都删除了。
3、重构:
将项目重新生成,运行即可解决问题。
这种方法成功的解决了我的问题,回顾整个过程,可能的原因是release产生的文件夹中在之前添加了一些可能造成冲突或者歧义的文件,也可能是在尝试了网上得到一些方法过后在该文件夹中留存了一些文件,使得后续的操作无效。
注意
1、在尝试这种方法时可以先将文件夹拷贝留存一份,这样后续就算出现其他问题也可以有保障。
2、最关键的是:保证需要的程序位数一致32位或64位!!!!!!!!!
3、调用qDebug()<<QSqlDatabase::drivers();查看存在的驱动是否有QMYSQL QMYSQL3
如果输出中没有这两个,先进行方法一的操作;
4、如果输出是:
QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3 QODBC QODBC3 QPSQL QPSQL7
那么尝试后两种方法;