qt連接mysql報錯:QSqlDatabase: QMYSQL driver not loaded QSqlDatabase: available drivers: QSQLITE QODBC QODBC3 QPSQL QPSQL7


  之前使用Qt連接mysql數據庫,遇到過這樣的報錯,后來解決了,但沒有記錄下來,這次又遇到了,花了好多的精力,這次吸取上次的教訓,做一下記錄和總結。

  報錯截圖:

 

 

 

編輯背景:
  Qt5.13.0,編譯器是mingw73_64,是64位的。
  mysql-5.7.27-winx64,也是64位的。
  有人說,qt的編譯器的位數要和數據庫的位數是一致的,我沒試過不同位數行不行,反正我的都是64位的。

 

問題:

  使用<QSqlDatabase>庫進行mysql的連接操作,出現下面的報錯信息,當然別忘了在.pro文件里的QT += sql
  QSqlDatabase: QMYSQL driver not loaded
  QSqlDatabase: available drivers: QSQLITE QODBC QODBC3 QPSQL QPSQL7


問題分析:

  根據上網查資料,還有最后自己的實踐,結論就是:qt里沒有和mysql的連接插件,就是缺少qmysql.dll,
有人說,只要把mysql安裝目錄下的lib文件夾下的libmysql.dll復制到qt的編譯器的bin目錄下就行了,我試過了,然並卵。

解決操作:
  注意: 下方出現的路徑中,路徑的前段部分(軟件的安裝位置)每個人可能都不一樣,但是路徑的后段部分應該是一樣的,請自行修改。

  1.先去自己的qt安裝目錄下去看有沒有mysql的插件,我的位置是:H:\QT\Qt5.13.0\5.13.0\mingw73_64\plugins\sqldrivers
進去一看,沒有mysql的相關插件(qmysql.dll),那么就網上查找方法,有人說要利用mysql的庫和qt里的Src里的mysql源碼來編譯出mysql的dll文件。

  


  2. 那么開動,先找到qt源碼里的mysql的源碼(PS:如果你在安裝qt的時候,沒有選擇安裝qt的源碼,建議重裝吧。我也是這樣的。。。,隨便提一句,現在安裝qt是需要賬號登陸的,不然下一步是灰色的,賬號到qt官網注冊就行了。),我的路徑是:H:\QT\Qt5.13.0\5.13.0\Src\qtbase\src\plugins\sqldrivers\mysql,雙擊打開mysql.pro,添加下面的三行代碼:

INCLUDEPATH += H:/mysql-5.7.27-winx64/include/    # 添加你自己的mysql安裝目錄下的include文件夾
LIBS += H:\mysql-5.7.27-winx64\lib\libmysql.lib    # 添加你的mysql安裝目錄下的lib文件夾下的libmysql.lib文件
DESTDIR = ../mysql/mysqlDll    # 設置編譯好的qmysql.dll放置的目錄,不然你可能不知道會生成在哪。


好了,點擊qt左下角的小錘子,也就是構建按鈕,出現如下的兩個錯誤:
Cannot read H:/qtsqldrivers-config.pri: No such file or directory
Project ERROR: Library 'mysql' is not defined.

問題1:

  第一個問題是說沒有這樣的文件,看了下,的確沒有這個文件,但是找到了類似的文件,我在我的文件夾:
H:\QT\Qt5.13.0\5.13.0\Src\qtbase\src\plugins\sqldrivers下,找到了configure.pri這個文件,那么我們就把原來需要qtsqldrivers-config.pri的地方改成configure.pri試試下唄。


解決:
  在qt里的左側欄里,雙擊qsqldriverbase.pri打開該文件,將第四行注釋掉,也就是前面加個#號,這樣:
#include($$shadowed($$PWD)/qtsqldrivers-config.pri),然后添加include(./configure.pri),保存,完成。

 

問題2:

  Library 'mysql' is not defined,這個最好解決,你說未定義,那我就不要了唄,在qt左側欄中雙擊打開mysql.pro,將第六行注釋掉,這樣:#QMAKE_USE += mysql,搞定!這個辦法是看到一個大佬的教程,像我這樣中規中矩的老實人,看到未定義第一想法肯定是找是不是頭文件沒找到?那這樣就解決不了問題了。

 

上面的操作完,我們的mysql.pro文件和qsqldriverbase.pri文件分別是:

 

 


那么,我們保存下上面的修改,再次點擊左下角的小錘錘,沒有報錯,一切安好。我懷着忐忑的心情,找到之前我指定的編譯好dll放置的路徑,我的是:H:\QT\Qt5.13.0\5.13.0\Src\qtbase\src\plugins\sqldrivers\mysql\mysqlDll,一看果然有qsqlmysql.dll和qsqlmysqld.dll,一個是release版,一個是debug版,這個就是qt連接mysql數據庫的橋梁啊。



最后,我們只需兩步操作,就完全搞定了。

第一步:

  將這兩個生成的dll,復制到qt的編譯器下的sqldrivers文件夾里,我的是:
H:\QT\Qt5.13.0\5.13.0\mingw73_64\plugins\sqldrivers\,OK,繼續下一步。


第二步:

  將自己的mysql安裝目錄下的lib文件夾下的libmysql.dll,復制到qt的編譯器的bin目錄下,我的是:
H:\QT\Qt5.13.0\5.13.0\mingw73_64\bin,到這里就全部結束了,再次運行自己寫的程序,連接mysql就完全沒問題了。

總結:
1. 看到有人會遇到這樣的報錯,提示沒有mysql.h這個頭文件,這個頭文件在mysql安裝目錄下的include文件夾里,我並沒有遇到這情況,所以也不清楚具體是啥情況。
2. 看到大部分教程是將libmysql.dll復制到qt的編譯器下的bin目錄里就搞定了,但很多人試了沒成功,那可能是因為,他們安裝的qt的插件庫里本身就有qsqlmysql.dll這樣的插件。所以除了復制libmysql.dll,還要到自己的plugins文件夾看下有沒有qsqlmysql.dll這樣的插件,這個是qt連接mysql的橋梁,沒有橋怎么連接呢。
3. 再次感謝那些做正確教程和深入研究解決問題的大佬,你們辛苦了。為了不讓成功案例沉底,小弟我就在這獻丑了。

 


免責聲明!

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



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