iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >解决Qt6连接MySQL的驱动问题
  • 391
分享到

解决Qt6连接MySQL的驱动问题

mysql数据库qtc++ 2023-08-19 15:08:45 391人浏览 独家记忆
摘要

目录 1. 引出问题2. 分析问题3. 解决问题3.1 获取编译所需材料3.1.1准备生成Mysql驱动文件的工程3.1.2 准备Mysql相关的头、库文件 3.2 开始进行编译3.3 复制文件(重要)3.4 测试连接 4

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 测试连接

.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

4 结束语

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

5 参考资料


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

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

来源地址:https://blog.csdn.net/DreamerZC/article/details/128040436

您可能感兴趣的文档:

--结束END--

本文标题: 解决Qt6连接MySQL的驱动问题

本文链接: https://www.lsjlt.com/news/375647.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • oracle怎么查询当前用户所有的表
    要查询当前用户拥有的所有表,可以使用以下 sql 命令:select * from user_tables; 如何查询当前用户拥有的所有表 要查询当前用户拥有的所有表,可以使...
    99+
    2024-05-14
    oracle
  • oracle怎么备份表中数据
    oracle 表数据备份的方法包括:导出数据 (exp):将表数据导出到外部文件。导入数据 (imp):将导出文件中的数据导入表中。用户管理的备份 (umr):允许用户控制备份和恢复过程...
    99+
    2024-05-14
    oracle
  • oracle怎么做到数据实时备份
    oracle 实时备份通过持续保持数据库和事务日志的副本来实现数据保护,提供快速恢复。实现机制主要包括归档重做日志和 asm 卷管理系统。它最小化数据丢失、加快恢复时间、消除手动备份任务...
    99+
    2024-05-14
    oracle 数据丢失
  • oracle怎么查询所有的表空间
    要查询 oracle 中的所有表空间,可以使用 sql 语句 "select tablespace_name from dba_tablespaces",其中 dba_tabl...
    99+
    2024-05-14
    oracle
  • oracle怎么创建新用户并赋予权限设置
    答案:要创建 oracle 新用户,请执行以下步骤:以具有 create user 权限的用户身份登录;在 sql*plus 窗口中输入 create user identified ...
    99+
    2024-05-14
    oracle
  • oracle怎么建立新用户
    在 oracle 数据库中创建用户的方法:使用 sql*plus 连接数据库;使用 create user 语法创建新用户;根据用户需要授予权限;注销并重新登录以使更改生效。 如何在 ...
    99+
    2024-05-14
    oracle
  • oracle怎么创建新用户并赋予权限密码
    本教程详细介绍了如何使用 oracle 创建一个新用户并授予其权限:创建新用户并设置密码。授予对特定表的读写权限。授予创建序列的权限。根据需要授予其他权限。 如何使用 Oracle 创...
    99+
    2024-05-14
    oracle
  • oracle怎么查询时间段内的数据记录表
    在 oracle 数据库中查询指定时间段内的数据记录表,可以使用 between 操作符,用于比较日期或时间的范围。语法:select * from table_name wh...
    99+
    2024-05-14
    oracle
  • oracle怎么查看表的分区
    问题:如何查看 oracle 表的分区?步骤:查询数据字典视图 all_tab_partitions,指定表名。结果显示分区名称、上边界值和下边界值。 如何查看 Oracle 表的分区...
    99+
    2024-05-14
    oracle
  • oracle怎么导入dump文件
    要导入 dump 文件,请先停止 oracle 服务,然后使用 impdp 命令。步骤包括:停止 oracle 数据库服务。导航到 oracle 数据泵工具目录。使用 impdp 命令导...
    99+
    2024-05-14
    oracle
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作