目录
在使用Qt6连接MySQL数据库时,在编译过程中出现了这样的问题:QSqlDatabase: QMYSQL driver not loaded. 具体错误如图1.1所示。
这说明MySQL的驱动没有被加载,错误提示信息的第二行可以看出当前可用的驱动仅包括QSQLITE、QODBC、QPSQL等,这说明此时是无法连接MySQL的。
这里查阅相关资料,可以了解到Qt连接到MySQL的过程:app->Qt的数据库插件->MySQL动态库->MySQL服务1。
因此,要连接到MySQL服务就必须建立相应的Qt数据库驱动插件和MySQL动态库文件,这也是本文要解决的重点问题。
这里以MSVC2019_64编译环境为例,而我们目前缺少的是:
- Qt数据库驱动插件:qsqlmysql.dll(release版本用)、qsqlmysqld.dll(debug版本用)
- MySQL动态库:libmysql.dll(release版本用)、libmysqld.dll(debug版本用)
为了得到连接MySQL所需要的驱动文件,也就是dll文件,我们需要通过手动编译来实现生成这些驱动文件(qsqlmysql.dll之类的文件);而在编译过程中我们需要准备一些MySQL数据库必要的相关文件。
重要!!!当然如果你要连接的Mysql数据库是64位,而且你的Qt项目也是建立在Desktop MSVC2019 64bit编译环境下,那你可以直接访问:https://github.com/sokestudio/qt6_mysql_driver 下载对应项目,进入dll_and_lib文件夹里面我帮大家编译好了,你可以直接使用,而无需再进行相应的编译工作,直接进入第3小节,进行复制相关文件即可;
当然如果你想进一步尝试也可以,你尽可以一步一步操作,享受这一过程~
3.1 获取编译所需材料
在正式编译之前我们需要准备:
- 生成Mysql驱动文件的工程
- Mysql相关的头、库文件
3.1.1准备生成Mysql驱动文件的工程
目前Qt6一般不提供mysql驱动,而且也没有pro文件来生成对应的驱动文件
因此,这里我整合了一个生成驱动文件的Qt工程,你可以按照下面的链接去访问该项目
https://github.com/sokestudio/qt6_mysql_driver
你可以选择任何方式去下载,但这里仍给出参考 ^_*
- 直接访问该链接
https://codeload.github.com/sokestudio/qt6_mysql_driver/zip/refs/heads/master
- 使用Git Bash去下载
git clone git@github.com:sokestudio/qt6_mysql_driver.git
3.1.2 准备Mysql相关的头、库文件
重要!!当然这里也一样,如果你要连接的Mysql数据库是64位,在我的项目工程中已经把所需的材料放进去了,已经置于项目文件夹下的mysql-connector-c-win64 文件夹中,可跳过本节,而直接进入第2小节编译环节,欢迎使用~
对于Mysql相关的动静链接态、头库文件(包括libmysql.lib、libmysql.dll等)文件,如果你安装的MySQL版本较新(8.0以后),或者你没有安装MySQL,你可能在本地找不到相关的文件,没关系我们可以通过下面的链接下载对应版本的文件:
https://downloads.mysql.com/archives/c-c/
当然如果你本地安装了低版本MySQL,你可以在其安装目录找到这些文件夹,没找到的话就按上面的下载相应的就可以啦!
3.2 开始进行编译
首先,进入工程目录qt6_mysql_driver,如果你需要编译其他版本下的mysql驱动文件,你仅需要把图1.4所示文件目录下的include和lib文件夹里的东西,对应放到本项目工程的mysql-connector-c-win64文件夹里面替换即可,如图1.5所示操作;如果不需要,可直接进行下一步;
注意:本项目的mysql-connector-c-win64文件夹内含release和debug两种64位下的版本;
其次,如图1.6所示,使用Qt Creator打开./mysql/mysql.pro工程;
接着按照图1.7所示的操作进行,设置相应的编译环境及生成目录文件夹,最后选择‘构建’,就会生成相应驱动文件,其中生成的驱动链接文件放在outputDir中,如图1.8所示。
(可能编译会出现:Cannot read C:/Users/.qmake.conf: No such file or directory,可忽略不影最终响驱动文件生成)
3.3 复制文件(重要)
这里,以MSVC2019 64bit环境下编译为例,将生成的文件qsqlmysql.dll复制到./Qt/6.4.0/msvc2019_64/plugins/sqldrivers/下,同时也可将debug环境下qsqlmysqld.dll(需要在debug环境下编译生成)放入,如图2.1所示;
此外,还需要将mysql-connector-c-win64/lib文件下的libmysql.dll复制到./Qt/6.4.0/msvc2019_64/bin/下,同样也可将libmysqld.dll放入,用于debug环境,如图2.2所示;
3.4 测试连接
.proQT += sql.cpp#include#includeint main(){ QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL"); db.setHostName("主机地址"); //连接本地主机 db.setPort(3306); db.setDatabaseName("数据库名称"); db.setUserName("账户"); db.setPassword("密码"); bool ok = db.open(); if (ok){ qDebug() << "link success"; } else { qDebug() << "link failed"; } return 0;}
注: 文中参考的其他资料2
今天到这里就结束啦,希望能帮助到你吧!撰写此文一方面为了记录日常开发过程遇到的问题,另一方面也希望能帮助和我遇到同样问题的小伙伴们,仅此而已~
来源地址:https://blog.csdn.net/DreamerZC/article/details/128040436