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