Windows 環(huán)境下使用 Qt 連接 MySQL
如果應(yīng)用只需要連接遠(yuǎn)程數(shù)據(jù)庫(kù),那么本地不需要安裝 MySQL,只需要找到 MySQL 提供的 libmysql.dll 和libmysqld.dll 兩個(gè)動(dòng)態(tài)連接庫(kù),把他們加入到 Qt安裝目錄\5.9\mingw53_32\bin\;默認(rèn) Qt 自帶已編譯好的 qsqlmysql.dll 和 qsqlmysqld.dll (文件路徑為 Qt安裝目錄\5.9\mingw53_32\plugins\sqldrivers\ );兩者如果配套就能成功地讓 Qt 連接上 MySQL。
(我安裝的Qt 版本是 Qt 5.9.0 mingw53_32,文章中提到的一些路徑是我本機(jī)上的路徑,需要進(jìn)行適當(dāng)修改)
一、測(cè)試 Qt 與 MySQL 是否能正常連接
假設(shè) Qt安裝目錄\5.9\mingw53_32\bin\ 下已加入了 libmysql.dll 和 libmysqld.dll,進(jìn)行以下測(cè)試。
•新建 Qt Widgets Application,修改 main.cpp 的代碼為:
#include "mainwindow.h"
#include <QApplication>
#include <QtSql>
#include <QDebug>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
//建立連接
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("localhost");
db.setPort(3306);
db.setDatabaseName("mysql");
db.setUserName("root");
db.setPassword("yourPassword"); //設(shè)置數(shù)據(jù)庫(kù)連接賬號(hào)的密碼
bool ok = db.open();
if(ok) qDebug()<<"OK";
else qDebug()<<"False";
return a.exec();
}
•構(gòu)建并運(yùn)行項(xiàng)目,查看應(yīng)用程序輸出
如果輸出 OK,那到此為止了,Qt 與 MySQL 連接正常;如果輸出 False,不出意外是因?yàn)?libmysql.dll、libmysqld.dll 與 qsqlmysql.dll、qsqlmysqld.dll版本不匹配!需要對(duì) qsqlmysql.dll、qsqlmysqld.dll 進(jìn)行修改。
二、添加 MySQL 的libmysql.dll、libmysqld.dll
(注意:Qt msvc2015_64 可以使用32
位、64 位版本的 MySQL 文件,Qt mingw53_32 只能使用 32 位版本的MySQL 文件)
之前提到,如果應(yīng)用只需要連接遠(yuǎn)程數(shù)據(jù)庫(kù),那么本地不需要安裝 MySQL,而只需要用到 MySQL 提供的動(dòng)態(tài)連接庫(kù) libmysql.dll 和 libmysqld.dll。那么如果不安裝MySQL,怎么獲取那兩個(gè)動(dòng)態(tài)鏈接庫(kù)文件?可以這樣做:
•從已安裝了 MySQL 的機(jī)器上拷貝這兩個(gè)文件。
•本地臨時(shí)安裝 MySQL,然后保留下需要的文件,卸載 MySQL。
安裝 MySQL 可以去官網(wǎng)下載安裝包,不過我不太喜歡這樣做,因?yàn)楝F(xiàn)在 MySQL 的安裝組件太多太雜,很多東西都是不必要。推薦去一些開源鏡像站上下載對(duì)應(yīng)版本,比如說 Tuna、USTC。臨時(shí)安裝 MySQL 之后先不急著卸載,后面編譯 MySQL 驅(qū)動(dòng)會(huì)用到。
三、重新編譯 qsqlmysql.dll、qsqlmysqld.dll
編譯 Qt 關(guān)于 MySQL 的驅(qū)動(dòng)需要用到 Qt 的源碼,獲取 Qt 的源碼可以使用 MaintenanceTool.exe 下載 Src,編譯驅(qū)動(dòng)用到的工程文件路徑為 Qt安裝目錄\5.9\Src\qtbase\src\plugins\sqldrivers\mysql\ 。源碼差不多有2G的大小,而編譯驅(qū)動(dòng)需要用到的工程文件大約幾十M,要是存儲(chǔ)空間和網(wǎng)速不給力,建議只下載
qtbase-opensource-src-5.9.0.zip,需要的工程在 qtbase-opensource-src-5.9.0\src\plugins\sqldrivers\mysql\ 。
用 Qt 打開上面提到的編譯驅(qū)動(dòng)用到的工程文件,在 mysql.pro 末尾加上這兩句:
INCLUDEPATH += mysql安裝目錄\include
LIBS += -Lmysql安裝目錄\lib\ -llibmysql
構(gòu)建并運(yùn)行項(xiàng)目會(huì)在 C 盤下生成 plugins\sqldrivers 目錄,里面包含 qsqlmysql.dll、qsqlmysqld.dll 兩個(gè)文件,將它們復(fù)制一份覆蓋原先的兩個(gè)文件即可。再次進(jìn)行 Qt 與 MySQL 的連接測(cè)試,成功了沒有?
相關(guān)文章
C?語(yǔ)言實(shí)現(xiàn)猜數(shù)字小游戲完整示例代碼
這篇文章主要介紹了如何使用C語(yǔ)言生成1到100之間的隨機(jī)數(shù),并提供了一個(gè)簡(jiǎn)單的猜數(shù)字游戲的實(shí)現(xiàn)代碼,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-03-03
C/C++實(shí)現(xiàn)監(jiān)控目錄文件變化
ReadDirectoryChangesW是Windows操作系統(tǒng)提供的一個(gè)函數(shù),用于監(jiān)視目錄的變化,本文主要為大家介紹了如何使用ReadDirectoryChangesW實(shí)現(xiàn)監(jiān)控目錄文件變化,需要的可以參考下2023-11-11
VScode搭建C/C++開發(fā)環(huán)境的詳細(xì)過程
最近迷上了vscode,小巧美觀,最主要的是全平臺(tái),但是vscode并不是ide,必須得自己配置環(huán)境,下面這篇文章主要給大家介紹了關(guān)于VScode搭建C/C++開發(fā)環(huán)境的詳細(xì)過程,需要的朋友可以參考下2023-06-06
C++ Boost PropertyTree解析INI文件詳解
Boost PropertyTree庫(kù)不僅可以解析JSON,XML格式,還可以直接解析INI格式文件。這篇文章就是為大家介紹一下如何通過Boost PropertyTree解析INI文件,需要的可以參考一下2022-01-01
C/C++讀取大文件數(shù)據(jù)方式詳細(xì)講解
這篇文章主要介紹了C語(yǔ)言/C++讀取大文件數(shù)據(jù)的完整方式過程,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-09-09
C++實(shí)現(xiàn)數(shù)獨(dú)快速求解
這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)數(shù)獨(dú)快速求解的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03
Qt中集成并使用SQLite數(shù)據(jù)庫(kù)的超完整指南
這篇文章主要介紹了Qt中集成并使用SQLite數(shù)據(jù)庫(kù)的相關(guān)資料,包括環(huán)境配置、連接數(shù)據(jù)庫(kù)、執(zhí)行SQL操作、事務(wù)處理、使用模型-視圖編程、錯(cuò)誤處理、高級(jí)技巧與注意事項(xiàng)以及常見問題解答,需要的朋友可以參考下2025-04-04

