【问题记录】解决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驱动的例子,问题终于解决了!!!
相关推荐
wefg18 分钟前
【MySQL】事务
数据库·mysql
黑白极客16 分钟前
mysql的高可用性
数据库·mysql
一十九的酒29 分钟前
Oracle 12c 标准版无缝升级企业版实战记录
数据库·oracle·标准版切换到企业版
ZhengEnCi43 分钟前
S02-SpringBoot实体类新增字段对已有数据的影响及自动DDL同步机制详解
数据库·spring boot
妙码生花1 小时前
从 PHP 到 AI + Golang,程序员自救转型手记(三十二):增加 admin_rule 模型及数据表迁移
数据库·go·ai编程
千维百策6662 小时前
SRE 中如何消除琐务:提升工程效率与服务可靠性的实践方法
数据库
卓怡学长2 小时前
w266基于spring boot + vue 圣地延安美食乐享系统
java·数据库·vue.js·spring boot·spring·intellij-idea
名不经传的养虾人3 小时前
从0到1:企业级AI项目迭代日记 Vol.65|最危险的故障不是崩溃,是悄悄换掉了正确答案
数据库·人工智能·ai编程·ai-agent·企业ai
程序员佳佳3 小时前
模型网关灰度不是调百分比:把放量、观测和回滚做成账本
java·数据库·人工智能·redis·gpt·aigc·embedding
绩隐金3 小时前
用AI开了本小说 九折归潮
数据库