【问题记录】解决Qt连接MySQL报“QMYSQL driver not loaded”以及不支持MySQL事务操作的问题!

环境

  • Windows 11 家庭中文版,64 位操作系统, 基于 x64 的处理器
  • Qt 5.15.2 MinGW 32-bit
  • mysql Ver 14.14 Distrib 5.7.42, for Win32 (AMD64)

问题情况

  1. 在Qt 5.15.2 中编写连接MySQL数据库代码后,使用 MinGW 32-bit 构建套件进行编译运行后,报了 "QMYSQL driver not loaded" 错误!
  2. 工作中也还遇到了在 Qt 5.15.2 中操作MySql数据库不能开启事务操作的问题!判断是否支持MySQL事务操作的语句如下:
    1. m_db.driver()->hasFeature(QSqlDriver::DriverFeature::Transactions);

问题分析

问题一

  1. Qt连接MySQL报 "QMYSQL driver not loaded" 错误很明显就是MySQL驱动的问题。
  2. 之前在 Qt 5.9.6 中也遇到了驱动未加载的问题,在按该文章 【问题记录】Qt连接MySQL报 QMYSQL driver not loaded 错误!进行操作时,还是不能解决,因为使用的Qt版本不同,所以对MySQL的驱动要求也会有所改变。

问题二

  1. Qt 5.15.2 应该支持MySQL数据库的事务操作,但具体的支持取决于所使用的数据库驱动程序和数据库引擎。
  2. 以下是一些可能的原因,导致在 Qt 5.15.2 中无法对MySQL数据库进行事务操作的情况:
    1. 使用不支持事务的数据库引擎:某些数据库引擎(例如MySQL的MyISAM)不支持事务操作。如果在这些引擎上创建表格,那么无论您使用什么版本的Qt,都无法进行事务操作。确保使用的是支持事务的数据库引擎,如InnoDB。
    2. 使用不正确的数据库驱动程序:Qt 使用不同的数据库驱动程序来连接到各种数据库。如果使用的数据库驱动程序不正确或不支持事务操作,就可能会遇到问题。使用确保选择了适当的数据库驱动程序,如QMYSQL。
    3. Qt 编译问题:在某些情况下,Qt 库可能未正确编译或配置以支持数据库的事务操作。确保使用的 Qt 5.15.2 版本已经正确构建并包括 SQL 模块。

总结

  1. 根据上面的情况进行分析,可以肯定这类问题的解决办法得从MySQL驱动上进行下手,但MySQL官网提供的最新驱动已经在2017年就停止更新了并且不支持当前Qt 5.15.2版本了。
  2. 所以还是得自己来根据 "Qt源码的MySQL源码部分" 和 已经安装好的MySQL来生成适用于当前Qt版本的MySQL驱动程序。

解决办法

前提条件

  1. 在安装Qt的时候记得勾选Qt源码。
  2. MySQL的安装位数要和Qt的构建套件位数一致(比如Qt使用的是MinGW 32-bit,那MySQL安装位数也必须位32位)。

编译Qt 的MySQL源码生成MySQL驱动程序

  1. 将 D:\Software\IT\MySQL\mysql-5.7.42-win32\lib 目录下的 libmysql.dll 和 libmysql.lib 库文件拷贝到 MinGW 32-bit 编译套件的bin目录下。
  2. 找到MySQL源码所在路径(本人:D:\Software\IT\Qt\5.15.2\Src\qtbase\src\plugins\sqldrivers\mysql),然后双击mysql目录下的 mysql.pro 文件,在Qt Creator中选择 MinGW 32-bit 编译套件。
  3. 打开 mysql.pro 文件,进行如下的编辑:
  4. 点击Qt Creator界面左下角的小锤子来构建当前mysql源码。
  5. 然后会在D:\Software\IT\Qt\5.15.2\mingw81_32\plugins\sqldrivers目录下生成如下几个文件。
  6. 最后运行下测试MySQL驱动的例子,问题终于解决了!!!
相关推荐
沐泽Mu13 分钟前
嵌入式学习-QT-Day07
c++·qt·学习·命令模式
沐泽Mu14 分钟前
嵌入式学习-QT-Day09
开发语言·qt·学习
KELLENSHAW39 分钟前
MySQL45讲 第三十七讲 什么时候会使用内部临时表?——阅读总结
数据库·mysql
四七伵1 小时前
MySQL外键类型与应用场景总结:优缺点一目了然
mysql
core5122 小时前
flink cdc各种数据库 jar下载地址
mysql·oracle·flink·jar·oceanbase·cdc
小刘鸭!2 小时前
Hbase的特点、特性
大数据·数据库·hbase
凡人的AI工具箱2 小时前
每天40分玩转Django:Django表单集
开发语言·数据库·后端·python·缓存·django
奔跑草-2 小时前
【数据库】SQL应该如何针对数据倾斜问题进行优化
数据库·后端·sql·ubuntu
Elastic 中国社区官方博客2 小时前
如何通过 Kafka 将数据导入 Elasticsearch
大数据·数据库·分布式·elasticsearch·搜索引擎·kafka·全文检索
P.H. Infinity2 小时前
【Redis】配置序列化器
数据库·redis·缓存