Qt小技巧14.Qt5.12.x編譯Mysql插件驅動

1 遇到的問題

Qt後面的版本都沒有直接帶Mysql插件驅動了,應該是協議的原因,需要我們自己手動編譯下,默認是這樣子的:

打印下QSqlDatabase::drivers()結果如下:

("QSQLITE", "QODBC", "QODBC3", "QPSQL", "QPSQL7")

很顯然,默認是不包含Mysql的插件驅動。
如果使用QSqlDatabase::addDatabase("QMYSQL")去加載插件,就會報下面的錯誤:

QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QODBC QODBC3 QPSQL QPSQL7

這個錯誤是不是很經典,網上也有很多編譯插件的教程,但是居然沒有一篇文章是完全能夠解決問題的,一定要綜合多篇文章一起纔行,所以還得要自己多動動手纔行,下面我們來看看解決辦法。

2 解決辦法

2.1 下載源碼

如果安裝Qt時勾選了源碼,這步就可忽略,但是大多數人安裝時是沒有勾選的,可以自己去下載一下:

附加地址https://download.qt.io/archive/qt/5.12/5.12.6/submodules/
這裏根據自己的版本下載即可。

2.2 解壓源碼

如果安裝Qt時勾選了源碼,這步也可忽略,這裏只提一點,解壓時一定要整個目錄一起解壓,不然會影響後面的配置:

解壓目錄自己可以隨便指定,一定要全部一起解壓,我這裏解壓到了D:/QtPro目錄下。

2.3 打開mysql.pro工程

首先打開工程文件:

打開後無非會遇到下面兩種錯誤:

Project ERROR: Library 'mysql' is not defined.
Cannot read D:/qtsqldrivers-config.pri: No such file or directory

爲了解決這個問題,接下來我們修改下配置。

2.4 修改工程文件

修改mysql.pro文件如下:

這裏額外提示下,如果本地沒有安裝mysql數據庫,可以下載對應的zip包,裏面有對應的頭文件和庫文件,例如我這裏服務器的版本是mysql-5.7.9,所以我下載的版本是mysql-5.7.9-winx64.zip,並解壓到了D:/Program目錄下:

然後,修改qsqldriverbase.pri文件如下:

好了,上面提到的兩個錯誤到這裏就解決了,下面開始編譯。

2.5 編譯一下

編譯完成後,會在指定的build目錄下生成插件驅動:

2.6 部署一下

首先將編譯生成的mysql插件驅動複製到sqldrivers目錄下:

然後再將Mysql驅動複製到Qt安裝目錄bin目錄下:

3 驗證一下

首先使用QSqlDatabase::drivers()打印下:

("QSQLITE", "QMYSQL", "QMYSQL3", "QODBC", "QODBC3", "QPSQL", "QPSQL7")

很顯然,Mysql插件驅動已經安裝成功了。
下面測試下能不能連接到數據庫:

    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    db.setHostName("192.168.10.5");
    db.setUserName("root");
    db.setPassword("123456");
    db.setPort(3306);
    qDebug() << db.open() << db.lastError().text();

結果打印如下:

好啦,搞定!此方法應該對其他版本也適用,需要自行去測試。
最後提一下,我們編譯的插件qsqlmysql.dll是依賴於Mysql驅動libmysql.dll的,兩者缺一不可,插件就像是中間轉換層一樣,會對Mysql驅動進行適配,直接調用是不行的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章