Qt | Windows下Mysql/Mariadb數據庫驅動編譯,解決"Driver not loaded"錯誤
問題
在使用Qt連接數據庫時,出現Driver not loaded報錯(這里以Mariadb數據庫為例Mysql同理)
指定QMYSQL情況下報錯

指定QMARIADB驅動情況下報錯

出現原因分析
由于Qt Sql模塊使用的是驅動程序插件與不同的數據庫API進行通信,當缺少當前連接的數據庫驅動插件時,就會報錯"Driver not loaded"
在我們進行數據庫連接時,會調用QSqlDatabase的addDataBase制定連接數據庫的驅動

在Qt中制定數據庫驅動后,Qt會動態加載數據庫驅動插件,首先是查找安裝目錄下的plugins\sqldrivers文件夾,我使用的是minGw32編譯器,所以實際查找的目錄應該是
D:\Qt\5.15.2\mingw81_32\plugins\sqldrivers
Qt查找對應文件夾中是否存在指定的驅動,一般驅動插件的存儲類型也是存在一定區別:
我使用的Qt版本為Qt5.15.2,這里以QSQLITE驅動為例(因為這個sqllite數據庫驅動一般會包含在庫目錄中,不用再手動編譯),首先介紹一下不同引用庫對應的驅動文件格式:
● minGw:
○ qsqllite.dll ---發布版本(Realse)的數據庫驅動
○ qsqllite.dll.debug ---調試版本(Debug)的數據庫驅動
● msvc:
○ qsqllite.dll ---發布版本(Realse)的數據庫驅動
○ qsqllited.dll ---調試版本(Debug)的數據庫驅動
這里就需要注意自己使用的編譯器/引用庫是哪一個,對應的編譯器生成的文件格式參考上面的內容。
使用minGw64一般引用庫在Qt安裝目錄下的C:\Qt[Qt版本]\mingw81_64\lib,編譯器在C:\Qt\Tools\mingw810_64目錄下
使用msvc64一般引用庫在Qt安裝目錄下的C:\Qt[Qt版本]\msvc2019_64\lib,編譯器通常安裝在 Visual Studio 的目錄下
解決方案
驅動編譯
這里以編譯Mariadb數據庫驅動為例。
首先找到Qt的數據庫插件編譯源代碼目錄,我的目錄為:
D:\software\Qt\5.15.2\Src\qtbase\src\plugins\sqldrivers
接下來需要明確自己的目前使用的引用庫及編譯器,以及需要編譯的數據庫驅動,因為我們需要編譯的是Mysql/Mariadb數據庫,所以選擇D:\software\Qt\5.15.2\Src\qtbase\src\plugins\sqldrivers\mysql目錄下的pro文件,并用QtCreator打開,配置項目時,選擇自己項目相同的編譯器,我這里選擇minGw64編譯器配置項目
然后修改mysql.pro文件如下圖

添加的頭文件搜索路徑和庫文件路徑:
頭文件路徑
INCLUDEPATH += "C:/Program Files/MariaDB 10.11/include/mysql/"
庫文件路徑
LIBS += -L"C:/Program Files/MariaDB 10.11/lib" -lmariadb
在release下進行構建,將會在構建目錄下生成三個文件(構建目錄是D:\software\Qt\5.15.2\mingw81_64\qtbase\src\plugins\sqldrivers\mysql):
然后將這 三個文件拷貝至D:\software\Qt\5.15.2\mingw81_64\qtbase\src\plugins\sqldrivers\plugins\sqldrivers(對應自己使用的編譯器進行選擇)

接下來再進行測試連接,即可連接成功。
編譯數據庫驅動后,使用windeployqt打包發布版本并在安裝了MariaDb/Mysql環境下仍然報錯“Driver not Load"解決方法
方法1:mariaDb/Mysql安裝目錄下的lib目錄的環境變量
方法2:每次打包程序時手動復制動態庫文件libmysql.dll和libmariadb.lib到exe程序同級目錄中(動態庫在mariaDb/Mysql安裝目錄下的lib目錄下)

浙公網安備 33010602011771號