Qt踩坑之mysql數據庫不支持事務操作?

文章已更新,最新地址:https://www.fearlazy.com/index.php/post/145.html

 

 現象:

    在調試數據庫操作時發現還沒commit數據已經插入表中,執行rollback也沒有作用,明明已經調用了transaction(),這是爲什麼呢?

 

    開始排查:

    1.確定數據庫驅動是否支持事務?使用QSqlDriver的hasFeature函數,函數的參數DriverFeature是QSqlDriver的一個枚舉。

image.png

    QSqlDriver可以通過QSqlDatabase的driver()函數獲得。經過測試居然不支持事務,這不科學啊。

 

    2.不支持事務難道是創建表時,數據庫引擎選擇錯誤?使用MySQL Workbench查看錶的信息:

image.png

    InnoDB是支持事務的啊,這就更奇怪了。

 

    3.不是mysql的問題那就是Qt的問題了。首先想到的就是Qt編譯的數據庫驅動問題,於是重新編譯了mysql的數據庫驅動,再次測試仍然顯示不支持事務。

    

    4.最後考慮是在程序運行時出現問題,程序在使用mysql時需要用到mysql的動態庫libmysql.dll,將mysql安裝目錄下的libmysql.dll拷貝到應用程序的目錄下,再次測試事務功能正常,出現問題的原因在於原來在應用程序的目錄下存在一個版本不同的libmysql.dll(電腦裏裝了好多版本的環境...)。

    

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章