MySQL – QT5.15连接MySQL8.0驱动的编译和使用

最近由于客户需要,需要进行多账号登录和提醒,故从Github上找到一个6年前的代码,发现现在改改还可以使用,于是就开始下载并编译,通过修改后,发现程序可以编译通过,但是无法连接MySQL数据库,提示如下错误:

MySQL - QT5.15连接MySQL8.0驱动的编译和使用

就是上面这个错误,我通过百度、谷歌等搜索,找了一大圈,最后发现还是需要通过Qt提供的源码Src进行编译得到MySQL驱动。

现在新的QT5.15安装是需要账号的,为此我还注册了一个账号,用来安装软件。

MySQL - QT5.15连接MySQL8.0驱动的编译和使用

如果你在安装QT的时候没有勾选Src源码,也可以去控制面板,找到Qt,然后右键选择更改即可。这样我们也可以用来卸载程序,也可以新增或者移除一些功能选项。一直Next到Select Components,勾选下图红色框中的Sources进行安装即可。

MySQL - QT5.15连接MySQL8.0驱动的编译和使用

此时再打开Qt安装目录,即可看到Src目录,如下图所示:

MySQL - QT5.15连接MySQL8.0驱动的编译和使用

随后一直定位到如下路径C:\Qt\5.15.2\Src\qtbase\src\plugins\sqldrivers\mysql,即可发现里面有一个.pro的文件,该文件就是我们用来编译驱动的源代码,不过需要对代码进行稍微修改,我们使用Qt Cteator打开即可。

MySQL - QT5.15连接MySQL8.0驱动的编译和使用
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)

DESTDIR = $$PWD/sutMySQL
INCLUDEPATH += "C:/Program Files/MySQL/MySQL Server 8.0/include"
DEPENDPATH += "C:/Program Files/MySQL/MySQL Server 8.0/include"
LIBS += "C:/Program Files/MySQL/MySQL Server 8.0/lib/libmysql.lib"

上面最后三行要根据自己安装的MySQL路径来,这样设置后,点击Debug,选择Desktop Qt 5.15.2 MSVC2019 64bit。

MySQL - QT5.15连接MySQL8.0驱动的编译和使用
MySQL - QT5.15连接MySQL8.0驱动的编译和使用

在mysql目录下创建目录sutMySQL目录,然后再点击上图左下角的锤头,即可编译。编译完成后,就会在sutMySQL目录下看到编译生成的qsqlmysql.dll和qsqlmysqld.dll。

MySQL - QT5.15连接MySQL8.0驱动的编译和使用

最后,只需将这两个生成的dll,复制到qt文件夹下:C:\Qt\5.15.2\msvc2019_64\plugins\sqldrivers。

MySQL - QT5.15连接MySQL8.0驱动的编译和使用

并且也要将自己的mysql安装目录下的lib文件夹下的libmysql.dll,复制到qt的编译器的bin目录下,这样Qt就可以连接Mysql了。

参考网址:
1、QT qmysql driver not loaded
2、Qt5.13使用MYSQL报错:QSqlDatabase: QMYSQL driver not loaded 解决办法
3、Qt5.13.0用mysql8.0.17编译坑爹的mysql驱动
4、QT5.14连接mysql8.0的驱动的编译和使用

常见问题汇总:

问题一:为啥编译为Release版本的程序,拷贝到其他电脑无法连接MySQL?我都已经复制了对应的MySQL DLL文件到exe目录了。

如果需要把编译好的程序发布到其他电脑运行,需要首先在exe同目录下建一个plugins/sqldrivers这样的二级目录下,把qsqlmysql.dll和qsqlmysqld.dll放进去哦,最后exe同目录下也需要拷贝libmysql.dll文件,这样就可以正常访问MySQL啦。

问题二:MySQL8.0 或 MySQL5.7给root用户赋予远程连接权限(Windows)

# 连接mysql,根据自己的密码进行修改
mysql -uroot -proot

# 选中mysql数据库
use mysql;

# 修改库中user表中,user用户的host=%(任意连接)
update user set host='%' where user ='root';

# 重新加载权限表
flush privileges;

# 给root用户赋予远程连接权限
grant all privileges on *.* to 'root'@'%' with grant option;

原创文章,作者:Steven,如若转载,请注明出处:https://www.saveutime.net/qt-mysql.html

发表评论

登录后才能评论