qt的mysql連接教程以及驅(qū)動編譯相關(guān)問題最新版,寫于2023年8月18日
最近寫項目需要與mysql數(shù)據(jù)庫建立連接,在網(wǎng)上查了很多資料,要么資料是五六年前的,而兩三年前的資料要么有問題,要么就是感覺是東拼西湊出來的一樣,驢頭不對馬嘴,而且過程及其粗糙,生怕大家學(xué)會了,故而自己編譯完后寫下了教程---2023.8.18
?。。∽⒁?,mysql驅(qū)動編譯問題根據(jù)不同的版本很可能出現(xiàn)極其嚴重的問題導(dǎo)致本版本無法編譯,請注意
?
Qt默認是不支持mysql驅(qū)動的,需要自己進行手動編譯,我的是6.5.2,可以看到在這里
6.5.2\mingw_64\plugins\sqldrivers
這個文件夾下面是沒有qsqlmysql.dll這個組件的
?
驅(qū)動編譯問題首先需要源碼也就是qt自帶的源碼,如果qt下沒有這個Src文件夾,是因為當(dāng)初安裝的時候沒有勾選

返回qt安裝目錄下,打開cmd窗口,將MaintenanceTool.exe拖入cmd窗口

如圖

Powershell也可以(我自己用的powershell),然后空一格,輸入鏡像網(wǎng)站
--mirror https://mirrors.tuna.tsinghua.edu.cn/qt
mirror后面的部分不唯一,網(wǎng)上也能找到很多大學(xué)的鏡像網(wǎng)站
(你也可以直接雙擊打開,只不過下載速度極其感人就是了,及其折磨)

然后回車,就可以打開qt頁面了,點擊下一步,選擇添加或移除組件,然后下一步,勾選Archive

然后點擊篩選,就可以顯示更多版本了,找到自己的版本,然后勾選Sources

這里我已經(jīng)安裝過了,就不演示了,下面也沒什么,等就好了,剩下的點擊下一步安裝就好了
安裝好了之后,就可以有Src了,之后進入Src\qtbase\src\plugins\sqldrivers

打開.cmake.conf這個文件,選擇使用記事本,可以看到本來應(yīng)該是這樣的

我們添加上這三行代碼
SET(FEATURE_sql_mysql ON)
SET(MySQL_INCLUDE_DIR "x:/xxxx/include")
SET(MySQL_LIBRARY "x:/xxx/lib/libmysql.lib")
?
最后兩行是你下載的mysql的安裝路徑,mysql的安裝本處不再多說,例如我的安裝在了E盤的Mysql下,就寫成這樣
SET(FEATURE_sql_mysql ON)
SET(MySQL_INCLUDE_DIR "E:/Mysql/include")
SET(MySQL_LIBRARY "E:/Mysql/lib/libmysql.lib")
然后打開qt,打開這個文件夾下的CMakeLists.txt


打開過后看左邊,是不是這樣的,如果整個名字都錯了,不是QSQLiteDriverPlugins,而是sqldrivers之類的(據(jù)我所知qt6.2.3是這樣的),那么建議更新版本到一個能夠打開的版本,或者自行查閱資料進行解決

當(dāng)然,也有可能名字是對的,但是出現(xiàn)了多一個文件夾例如psql(我一開始就是這樣的),然后運行起來會有上百個報錯,那么這個時候在.cmake.conf之前那個文件中,改成這樣
SET(FEATURE_sql_mysql ON)
SET(FEATURE_sql_psql OFF)
SET(MySQL_INCLUDE_DIR "E:/Mysql/include")
SET(MySQL_LIBRARY "E:/Mysql/lib/libmysql.lib")
就可以關(guān)閉psql了,記得吧最后兩行的替換成自己的mysql路徑,之后選擇release進行編譯,

當(dāng)然有可能他會報一個錯誤,不需要理會

這個時候返回.cmake.conf的上級目錄,可以看到生成的realse文件

進入然后點擊plugins,點擊sqldrivers,可以看到

這里我們復(fù)制粘貼qsqlmysql.dll和qsqlmysql.debug,把他放入開頭提到的6.5.2\mingw_64\plugins\sqldrivers,這里6.5.2是我的qt版本,各位自行更改就好

然后打開你的mysql,進入lib文件夾,找到libmysql.dll

把他放到你的qt的bin里面(這一段大家如果找不到一定要仔細看我上面的文件夾路徑)

這個時候就搞定了,mysql驅(qū)動就已經(jīng)編譯并且加載完畢了,如果你有輸出驅(qū)動的代碼這個時候就能夠輸出有mysql驅(qū)動了,前提是你運行的版本要跟你剛剛修改的版本一樣
?
但是這還沒完,還有一個問題就是在連接mysql驅(qū)動的時候,依然會報錯,顯示mysql驅(qū)動沒有加載,但是輸出的可使用的驅(qū)動里面明明是有mysql的,這個問題是由于mysql版本高的時候會有一個保護機制,首先我們進入mysql的官網(wǎng)

選擇Connector/C++
下載相應(yīng)版本的zip,我的是8.1.0,也就是第二個,后面的Archives是歷史版本,如果不知道怎么查看自己的mysql版本,請打開mysql輸入密碼后輸入status查看


,下載完了之后進入文件夾,找到

把里面除了文件夾的所有組件

復(fù)制粘貼到你項目代碼生成的Debug或者Realse的文件下,這樣就可以連接上數(shù)據(jù)庫了,如果你發(fā)現(xiàn)你lib64內(nèi)容和我的不一樣,不要慌張,版本不一樣這是很正常的,正常操作就好

好了就是這樣,因為我下載的直接復(fù)制粘貼到了mysql文件夾下,所以lib64的路徑會不一樣,各位自行調(diào)整即可
這方面的問題本教程不可能完全提到,如果有不全的地方還請自行與其他教程或者帖子相結(jié)合,還請見諒
順帶一提,最后發(fā)布版本打包exe過后也需要把lib64的組件復(fù)制過去,本教程寫于2023年8月18日,如果時間過去很久,那么教程就僅供參考了,還望海涵