解决Qt6连接MySQL的驱动问题

1. 引出问题

在使用Qt6连接MySQL数据库时,在编译过程中出现了这样的问题:QSqlDatabase: QMYSQL driver not loaded. 具体错误如图1.1所示。

图1.1 错误信息

这说明MySQL的驱动没有被加载,错误提示信息的第二行可以看出当前可用的驱动仅包括QSQLITE、QODBC、QPSQL等,这说明此时是无法连接MySQL的。

2. 分析问题

这里查阅相关资料,可以了解到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版本用)

3. 解决问题

为了得到连接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

Alt

图1.2 qt6_mysql_driver项目

你可以选择任何方式去下载,但这里仍给出参考 ^_*

  1. 直接访问该链接
https://codeload.github.com/sokestudio/qt6_mysql_driver/zip/refs/heads/master
  1. 使用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/

图1.3 MySql Connector/C
这里以选择Windows(x86,64-bit)进行下载,而具体下载多少位版本取决于MySql数据库的版本位数,完成之后并解压得到如图1.4所示的文件目录,这里的include和lib文件夹就是我们编译所需的东西;

图1.4 Mysql Connector文件目录

图1.4 Mysql Connector文件目录

当然如果你本地安装了低版本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.5 替换版本操作

其次,如图1.6所示,使用Qt Creator打开./mysql/mysql.pro工程;

图1.6 mysql驱动生成工程

接着按照图1.7所示的操作进行,设置相应的编译环境及生成目录文件夹,最后选择‘构建’,就会生成相应驱动文件,其中生成的驱动链接文件放在outputDir中,如图1.8所示。
(可能编译会出现:Cannot read C:/Users/.qmake.conf: No such file or directory,可忽略不影最终响驱动文件生成)

图1.7 编译过程操作

图1.7 编译过程操作

图1.8 驱动文件生成目录

图1.8 驱动文件生成目录

图1.9 qsqlmysql.dll

图1.9 qsqlmysql.dll

3.3 复制文件(重要)

这里,以MSVC2019 64bit环境下编译为例,将生成的文件qsqlmysql.dll复制到./Qt/6.4.0/msvc2019_64/plugins/sqldrivers/下,同时也可将debug环境下qsqlmysqld.dll(需要在debug环境下编译生成)放入,如图2.1所示;

图2.1 mysql动态链接库

此外,还需要将mysql-connector-c-win64/lib文件下的libmysql.dll复制到./Qt/6.4.0/msvc2019_64/bin/下,同样也可将libmysqld.dll放入,用于debug环境,如图2.2所示;

图2.2 qt-mysql驱动插件

图2.2 qt-mysql驱动插件

3.4 测试连接

.pro
QT  += sql

.cpp
#include<QSqlDatabase>
#include<QDebug>
int 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

4 结束语

今天到这里就结束啦,希望能帮助到你吧!撰写此文一方面为了记录日常开发过程遇到的问题,另一方面也希望能帮助和我遇到同样问题的小伙伴们,仅此而已~

5 参考资料


  1. Qt连接MySQL数据库最详细的教程 ↩︎

  2. 彻底解决qt6.1.2,qmysql驱动. ↩︎

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sokedev

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值