对于这个问题的本质原因,我也搞不明白,所以记录的方法不一定对所有人行之有效。我的目的很简单,就是把数据库用起来,经过查找网上资料,最终把数据库跑起来了。因此记录如下:
1,出现这个问题是缺少相关的库文件;
2,其次Qt的编译工具需要和MySql的位数相同;【x64--x64】
3,因为我的MySQL是x64;【select @@version_compile_machine】,所以重新下载Qt镜像安装:https://download.qt.io/archive/qt/5.14/5.14.2/qt-opensource-windows-x86-5.14.2.exe
4,因为需要重新编译MySQl的库文件,所以安装Qt的时候需要勾选Source,并且勾选mingw64和mingw32;【编译库文件mingw64】
5,直接打开Qt安装目录中的工程文件:Qt\5.14.2\Src\qtbase\src\plugins\sqldrivers\mysql\mysql.pro。在此之前需要把sqldrivers拷贝进行备份,以防修改后无法还原。【sqldrivers_backup2024.4.2】
6,修改pro文件,为编译做准备,注意选择MinGW 64-bit编译:
TARGET = qsqlmysqlHEADERS += $$PWD/qsql_mysql_p.h
SOURCES += $$PWD/qsql_mysql.cpp $$PWD/main.cpp#QMAKE_USE += mysqlOTHER_FILES += mysql.jsonPLUGIN_CLASS_NAME = QMYSQLDriverPlugin
include(../qsqldriverbase.pri)
#这个主要是添加.h依赖文件使用
INCLUDEPATH+="C:\Program Files\MySQL\MySQL Server 8.0\include"#添加依赖的.lib文件
LIBS+="C:\Program Files\MySQL\MySQL Server 8.0\lib\libmysql.lib"#生成你所需要的dll存放目录
DESTDIR="C:\Users\xxxx\Desktop\test"
7,编译后运行后出现下面的界面,我以为是哪里搞错了,实际上库文件编译已经成功了。在桌面上test目录可以看到dll文件。
8,将编译产生的.dll和.a文件拷贝到:\Qt\5.14.2\mingw73_64\plugins\sqldrivers中,运行原来Qt的数据库工程文件,访问MySql数据库正常。
注意事项:
1,确保数据库工作正常;【我使用datagrip软件操作数据库正常,使用MySQL的命令行操作正常】
2,测试数据库的代码如下:
正常打印: ("QSQLITE", "QMYSQL", "QMYSQL3", "QODBC", "QODBC3", "QPSQL", "QPSQL7");
//打印Qt支持的数据库qDebug()<<QSqlDatabase::drivers();QSqlDatabase db =QSqlDatabase::addDatabase("QMYSQL");//连接数据库db.setHostName("localhost");db.setUserName("root");db.setPassword("123456");db.setPort(3306);db.setDatabaseName("user_database");//打卡数据库if(!db.open()){QMessageBox::warning(this,"错误",db.lastError().text());}