环境
- Windows 11 家庭中文版,64 位操作系统, 基于 x64 的处理器
- Qt 5.15.2 MinGW 32-bit
- mysql Ver 14.14 Distrib 5.7.42, for Win32 (AMD64)
问题情况
- 在Qt 5.15.2 中编写连接MySQL数据库代码后,使用 MinGW 32-bit 构建套件进行编译运行后,报了 "QMYSQL driver not loaded" 错误!
- 工作中也还遇到了在 Qt 5.15.2 中操作MySql数据库不能开启事务操作的问题!判断是否支持MySQL事务操作的语句如下:
- m_db.driver()->hasFeature(QSqlDriver::DriverFeature::Transactions);
问题分析
问题一
- Qt连接MySQL报 "QMYSQL driver not loaded" 错误很明显就是MySQL驱动的问题。
- 之前在 Qt 5.9.6 中也遇到了驱动未加载的问题,在按该文章 【问题记录】Qt连接MySQL报 QMYSQL driver not loaded 错误!进行操作时,还是不能解决,因为使用的Qt版本不同,所以对MySQL的驱动要求也会有所改变。
问题二
- Qt 5.15.2 应该支持MySQL数据库的事务操作,但具体的支持取决于所使用的数据库驱动程序和数据库引擎。
- 以下是一些可能的原因,导致在 Qt 5.15.2 中无法对MySQL数据库进行事务操作的情况:
- 使用不支持事务的数据库引擎:某些数据库引擎(例如MySQL的MyISAM)不支持事务操作。如果在这些引擎上创建表格,那么无论您使用什么版本的Qt,都无法进行事务操作。确保使用的是支持事务的数据库引擎,如InnoDB。
- 使用不正确的数据库驱动程序:Qt 使用不同的数据库驱动程序来连接到各种数据库。如果使用的数据库驱动程序不正确或不支持事务操作,就可能会遇到问题。使用确保选择了适当的数据库驱动程序,如QMYSQL。
- Qt 编译问题:在某些情况下,Qt 库可能未正确编译或配置以支持数据库的事务操作。确保使用的 Qt 5.15.2 版本已经正确构建并包括 SQL 模块。
总结
- 根据上面的情况进行分析,可以肯定这类问题的解决办法得从MySQL驱动上进行下手,但MySQL官网提供的最新驱动已经在2017年就停止更新了并且不支持当前Qt 5.15.2版本了。
- 所以还是得自己来根据 "Qt源码的MySQL源码部分" 和 已经安装好的MySQL来生成适用于当前Qt版本的MySQL驱动程序。
解决办法
前提条件
- 在安装Qt的时候记得勾选Qt源码。
- MySQL的安装位数要和Qt的构建套件位数一致(比如Qt使用的是MinGW 32-bit,那MySQL安装位数也必须位32位)。
编译Qt 的MySQL源码生成MySQL驱动程序
- 将 D:\Software\IT\MySQL\mysql-5.7.42-win32\lib 目录下的 libmysql.dll 和 libmysql.lib 库文件拷贝到 MinGW 32-bit 编译套件的bin目录下。
- 找到MySQL源码所在路径(本人:D:\Software\IT\Qt\5.15.2\Src\qtbase\src\plugins\sqldrivers\mysql),然后双击mysql目录下的 mysql.pro 文件,在Qt Creator中选择 MinGW 32-bit 编译套件。
- 打开 mysql.pro 文件,进行如下的编辑:
- 点击Qt Creator界面左下角的小锤子来构建当前mysql源码。
- 然后会在D:\Software\IT\Qt\5.15.2\mingw81_32\plugins\sqldrivers目录下生成如下几个文件。
- 最后运行下测试MySQL驱动的例子,问题终于解决了!!!