Qt在使用mysql数据库时,数据库可以正常连接,增删改都没有问题,但在判断是否支持事务时显示false
使用下面的语句判断
qDebug () <<"Transactions" << QSqlDatabase::database().driver()->hasFeature(QSqlDriver::Transactions) //输出false
查资料了解到,是mysql的驱动,与Qt当前版本不匹配导致的
解决办法:
第一步:重新编译mysql驱动
在Qt源代码中,提供了编译mysql驱动的工程 C:\Qt\Qt5.12.3\5.12.3\Src\qtbase\src\plugins\sqldrivers\mysql
(1)打开目录下mysql.pro
(2)注释 #QMAKE_USE += mysql
(3)添加 DESTDIR = ../mysql/lib/
(4)添加mysql头文件目录,编译
INCLUDEPATH +="D:\Software\mysql-8.0.19-winx64\include"(替换为当前下载的mysql目录)
LIBS +="D:\Software\mysql-8.0.19-winx64\lib\libmysql.lib"(替换为当前下载的mysql目录)
第二步:替换编译后的文件
(1)在替换之前,若已经在debug/release目录下生成了sqldrivers文件夹,则将第一步编译生成的qsqlmysqld.dll和qsqlmysql.dll分别拷贝至目录sqldrivers文件夹。若没有该文件夹,手动创建或者使用windeployqt命令。
(2)拷贝mysql目录下lib文件夹中的libmysql.dll,拷贝至debug/release根目录
(3)拷贝mysql目录下bin文件夹中的libcrypto-1_1-x64.dll和libssl-1_1-x64.dll,拷贝至debug/release根目录
再次执行
qDebug () <<"Transactions" << QSqlDatabase::database().driver()->hasFeature(QSqlDriver::Transactions);
返回值为true,问题解决。
附上编译好的资源https://download.csdn.net/download/daxuezdj7/12584330