Qt-解決Qt與MySQL連接過程中出現“QSqlDatabase: QMYSQL driver not loaded”問題


寫在前面:

  本文內容包括:

  (1)分析”QSqlDatabase: QMYSQL driver not loaded”出現的原因

  (2)解決“QSqlDatabase: QMYSQL driver not loaded”的方法總結

 

一、背景

  在使用Qt操作MySQL數據庫過程中,使用Qt編寫好連接MySQL數據庫的的代碼后,編譯調試時報錯QSqlDatabase: QMYSQL driver not loaded,意味着Qt應用程序與MySQL數據庫連接失敗。報錯如下圖所示:

      

 

  本工程項目開發環境為:

  (1)操作系統:Windows

  (2)MySQL版本為:8.0

  (3)Qt版本為:5.13

  (4)QtCreator版本 為:4.9.1

 

 

二、分析”QSqlDatabase: QMYSQL driver not loaded”出現的原因

  根據上圖的報錯提示,查閱官方文檔,鏈接:https://doc.qt.io/qt-5/sql-driver.html#qmysql-for-mysql-4-and-higher,得到相關信息,如下

  (1)Qt SQL模塊使用驅動程序插件與不同的數據庫api進行通信。

  (2)支持的數據庫如下:

               

 

  根據報錯信息提示可用的drivers是: QSQLITE QODBC QODBC3 QPSQL QPSQL7,其中沒有QMYSQL驅動。於是乎定位問題出現的原因是:缺少QMYSQL驅動。

  

 

 

 

 

 

 

查閱計算機Qt安裝路徑:D:\ProgramFiles\Qt\5.13.0\mingw73_32\plugins\sqldrivers 的sqldrivers插件,如下

  發現其中沒有與MySQL相關的驅動插件。

 

 

 

三、解決“QSqlDatabase: QMYSQL driver not loaded”的方法總結

 

  原來Qt5.13版本下不包含有驅動MySQL的驅動插件,那么就需要自己編譯插件了。編譯插件的過程如下:

 

  在編譯插件之前需准備兩個源碼包:

 

  (1)需要一個與MySQL連接的擴展包:mysql-connector-c-6.1.3-win32,資源下載鏈接為:https://dev.mysql.com/downloads/file/?id=450611

 

  (2)Qt的源碼,在安裝Qt的時候,可以選擇安裝資源來確保同時將Qt的源碼也安裝到自己的電腦上。

 

 

 

  兩個源碼包的資源文件如下圖所示:

 

              

 

 

          

  接下來,開始編譯源碼,如何編譯Qt源碼這里不細說了。

  (1)使用windows命令行切換到該MySQL驅動工程路徑下,使用qmake生成相應的makefile文件。

  

 

  (2)使用mingw32-make編譯該工程。

      

 

 

   在編譯過程中,出現了如下錯誤:

     

  提示在qsql_mysql_p.h頭文件中找不到mysql.h的頭文件。說明mysql.頭文件沒有引入到該工程中。於是在該工程的.pro文件中添加包含路徑和庫文件路徑,添加后文件如下:

       此處添加了用於MySQL連接的擴展包:mysql-connector-c-6.1.3-win32的頭文件和資源路徑

 

 

 

  添加完成后,重新使用qmake工具生成makefile文件,然后使用mingw32-make編譯該工程文件,編譯完成后,可以使用mingw32-make install完成插件的安裝,也可以不用,手動復制插件到指定路徑即可。編譯完成后,將生成如下MySQL的驅動組件:

      

    (路徑為D:\ProgramFiles\Qt\5.13.0\Src\qtbase\src\plugins\sqldrivers\plugins\sqldrivers)

 

  (3)將其中的qsqlmysql.dll文件和qsqlmysqld.dll文件復制到 D:\ProgramFiles\Qt\5.13.0\mingw73_32\plugins\sqldrivers,注意這里是D:\ProgramFiles\Qt\5.13.0\mingw73_32文件夾中

 

 

   (4)進行測試,在QtCreator中編譯運行自己寫好的MySQL連接程序,又出現報錯,如下圖:

  

 

  此時分析報錯,QMYSQL驅動已經存在,然而依然不能連接到MySQL數據庫。於是將MySQL連接的擴展包:mysql-connector-c-6.1.3-win32中的lib文件夾下的libmysql.dll和libmysql.lib(該ibmysql.lib文件可以不要)文件復制到Qt構建套件路徑D:\ProgramFiles\Qt\5.13.0\mingw73_32\bin下,如下圖:

  

 

  重新測試,於是乎可以連接到MySQL數據庫了。

 

 (四) 總結

  總而言之,使用了Qt sql模塊來操作MySQL數據庫,需要三個庫文件來支持,分別為:libmysql.dll、qsqlmysql.dll文件和qsqlmysqld.dll文件,三個文件缺一不可。若在Qt安裝路徑的插件文件夾路徑下(D:\ProgramFiles\Qt\5.13.0\mingw73_32\plugins\sqldrivers )找不到對應的驅動擴展,那么就需要編譯相應的驅動擴展文件到相應路徑。同時要將用於與MySQL連接的擴展包:mysql-connector-c-6.1.3-win32文件下的libmysql.dll庫文件復制到Qt構建套件路徑D:\ProgramFiles\Qt\5.13.0\mingw73_32\bin文件夾中,確保能與MySQL連接成功。

 

  (注:在使用Qt編寫數據庫連接層代碼時,可以使用QSqlDatabase::drivers()方法來查看Qt當前開發環境下有哪些可用的數據庫驅動程序)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM