【问题记录】解决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驱动的例子,问题终于解决了!!!
相关推荐
初见0018 分钟前
Java MySQL 索引深度解析:从原理到最佳实践
mysql
冻咸鱼1 小时前
MySQL中表操作
android·sql·mysql·oracle
心态特好1 小时前
从缓存到分库分表:MySQL 高并发海量数据解决方案全解析
数据库·mysql·缓存
TDengine (老段)1 小时前
TDengine 数据函数 LEAST 用户手册
大数据·数据库·sql·时序数据库·tdengine
骇客野人1 小时前
【软考备考】 NoSQL数据库有哪些,键值型、文档型、列族型、图数据库的特点与适用场景
数据库·nosql
BD_Marathon1 小时前
【MySQL】管理
数据库·mysql
寻找华年的锦瑟1 小时前
Qt-键鼠事件
开发语言·qt
倔强的石头_1 小时前
金仓多模数据库平替 MongoDB:电子证照国产化的技术实操与价值突破
数据库
Go高并发架构_王工1 小时前
MySQL性能优化案例分析:从问题到解决方案
数据库·mysql·性能优化
二十三之歌2 小时前
Redis 中文学习手册
数据库·redis·学习