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驅動進行適配,直接調用是不行的。


免責聲明!

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



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