qt鏈接mysql報錯:QSqlDatabase: QMYSQL driver not loaded QSqlDatabase: available drivers: QSQLITE QODBC QO

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

  報錯截圖:sql

 

 

 

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

 

問題:spa

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


問題分析:debug

  根據上網查資料,還有最後本身的實踐,結論就是:qt裏沒有和mysql的鏈接插件,就是缺乏qmysql.dll,
有人說,只要把mysql安裝目錄下的lib文件夾下的libmysql.dll複製到qt的編譯器的bin目錄下就好了,我試過了,然並卵。

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

  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. 再次感謝那些作正確教程和深刻研究解決問題的大佬,大家辛苦了。爲了避免讓成功案例沉底,小弟我就在這獻醜了。

相關文章
相關標籤/搜索