Qt遠程連接MySQL


基於項目需求,現需要在Windows環境下使用Qt項目遠程連接Ubuntu下的MySQL數據庫。

一、

Qt在5.12版本后下載不再自帶QMYSQL 驅動,所以如果要使用QMYSQL驅動需要自己編譯。

1. 下載mysql-connector-c-6.1.11源碼

下載地址:https://downloads.mysql.com/archives/c-c/

下載對應位數版本的源碼,

注意,使用的Qt版本和數據庫MySQL的版本位數必須相同,既要么都是32位,要么都是64位。

2. 打開官方提供文件sqldrivers.pro

文件所在路徑為D:\Qt\5.15.2\Src\qtbase\src\plugins\sqldrivers

D:\Qt是我的Qt的安裝目錄,如果沒有找到Src文件夾,則使用Qt的MaintenanceTool.exe在選擇組件時選中Source。

3. 編譯源碼

3.1 修改.pro文件

 

 

注釋掉 QMAKE_USE += mysql語句,不然會報錯找不到

添加庫文件路徑LIBS和 頭文件路徑(直接復制過來的路徑是 \ ,需要修改成 / )

指定編譯后的結果文件存放的地方 DESTDIR

3.2 修改qsqldriverbase.pri文件

該文件中有這么一句

include($$shadowed($$PWD)/qtsqldrivers-config.pri)

但是在Qt的文件夾中並不能找到該文件,會報錯。但是,我們可以在文件夾中找到configure.pri文件。所以,修改上面語句:

#include($$shadowed($$PWD)/qtsqldrivers-config.pri)
include (./configure.pri)

3.3 編譯程序

在Debug模式下編譯或Release模式。

(筆者在Debug下編譯成功但沒有結果文件,在Release下編譯成功得到結果文件

 

 

3.4 移動dll文件

將結果文件中的兩個DLL文件移動到你的Qt目錄下, D:\Qt\5.15.2\msvc2019_64\plugins\sqldrivers(筆者用的msvc)

3.5 移動mysql的庫文件

將mysql-connector-c-6.1.11的lib目錄下的libmysql.dll放到Qt的目錄bin下,(筆者是D:\Qt\5.15.2\msvc2019_64\bin)

3.5 在Qt中查看可用的SQL 驅動

qDebug() << QSqlDatabase::drivers();

4. 遠程連接MySQL數據庫

QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");   //選擇使用的QSql Driver
    db.setHostName("192.168.1.229");                    //遠程連接的數據庫IP地址
    db.setPort(3306);                      //數據庫提供的端口
    db.setUserName("xxx");                             //遠程連接的用戶
    db.setPassword("xxx");                            // 密碼
    db.setDatabaseName("0voice");                        //要訪問的數據庫
    // db.setConnectOptions("SSL_KEY=client-key.pem;SSL_CERT=client-cert.pem;SSL_CA=ca-cert.pem;CLIENT_IGNORE_SPACE=1");
    if(!db.open())
    {
        qDebug() << db.lastError().text();
    }else
    {
        qDebug() << "連接成功";
        return ;
    }

需要在MySQL的數據庫中有可用於遠程訪問的用戶。

MySQL8.0版本默認的加密方式是caching_sha2_password。但是很多客戶端很難支持,筆者在數據庫配置中將密碼加密方式改為了mysql_native_password。

項目的.pro文件中需要添加 QT += sql

運行時若提示"driver not load",將libmysql.dll放到exe同級文件夾下。

5. SSL問題

ubuntu下的MySQL8.0默認開啟遠程連接SSL。

所以遠程連接需要處理SSL。

 5.1 選擇關閉ssl

show variables like ‘%ssl%’;

查看數據庫的SSL設置情況,

在/etc/mysql/mysql.conf.d/目錄下,修改mysqld.cnf文件。

[mysqld]
skip_ssl   #在這個位置添加這一行

重啟mysql服務

service mysql restart

mysql的SSL就關閉了。

5.2 提供SSL

。。。暫時沒找到辦法。。。我的Qt使用了setConnectOptions設置了證書也還是提示SSL連接錯誤

http://slproweb.com/products/Win32OpenSSL.html


免責聲明!

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



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