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)下載安裝包,不過(guò)我不太喜歡這樣做,因?yàn)楝F(xiàn)在 MySQL 的安裝組件太多太雜,很多東西都是不必要。推薦去一些開(kāi)源鏡像站上下載對(duì)應(yīng)版本,比如說(shuō) 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 打開(kāi)上面提到的編譯驅(qū)動(dòng)用到的工程文件,在 mysql.pro 末尾加上這兩句:
INCLUDEPATH += mysql安裝目錄\include
LIBS += -Lmysql安裝目錄\lib\ -llibmysql
構(gòu)建并運(yùn)行項(xiàng)目會(huì)在 C 盤(pán)下生成 plugins\sqldrivers 目錄,里面包含 qsqlmysql.dll、qsqlmysqld.dll 兩個(gè)文件,將它們復(fù)制一份覆蓋原先的兩個(gè)文件即可。再次進(jìn)行 Qt 與 MySQL 的連接測(cè)試,成功了沒(méi)有?
上一篇:數(shù)據(jù)結(jié)構(gòu)與算法 排序(冒泡,選擇,插入)
欄 目:C語(yǔ)言
下一篇:c語(yǔ)言基于stdarg.h的可變參數(shù)函數(shù)的用法
本文標(biāo)題:Windows 環(huán)境下使用 Qt 連接 MySQL
本文地址:http://mengdiqiu.com.cn/a1/Cyuyan/1354.html
您可能感興趣的文章
- 01-10APUE筆記之:進(jìn)程環(huán)境詳解
- 01-10大數(shù)(高精度數(shù))模板(分享)
- 01-10深入解析Linux下\r\n的問(wèn)題
- 01-10Linux C 獲取進(jìn)程退出值的實(shí)現(xiàn)代碼
- 01-10解析Linux下的時(shí)間函數(shù):設(shè)置以及獲取時(shí)間的方法
- 01-10深入探討linux下進(jìn)程的最大線程數(shù)、進(jìn)程最大數(shù)、進(jìn)程打開(kāi)的文
- 01-10基于linux下獲取時(shí)間函數(shù)的詳解
- 01-10深入sizeof的使用詳解
- 01-10Linux下semop等待信號(hào)時(shí)出現(xiàn)Interrupted System Call錯(cuò)誤(EINTR)解決方法
- 01-10深入解析C中的數(shù)值與真假


閱讀排行
- 1C語(yǔ)言 while語(yǔ)句的用法詳解
- 2java 實(shí)現(xiàn)簡(jiǎn)單圣誕樹(shù)的示例代碼(圣誕
- 3利用C語(yǔ)言實(shí)現(xiàn)“百馬百擔(dān)”問(wèn)題方法
- 4C語(yǔ)言中計(jì)算正弦的相關(guān)函數(shù)總結(jié)
- 5c語(yǔ)言計(jì)算三角形面積代碼
- 6什么是 WSH(腳本宿主)的詳細(xì)解釋
- 7C++ 中隨機(jī)函數(shù)random函數(shù)的使用方法
- 8正則表達(dá)式匹配各種特殊字符
- 9C語(yǔ)言十進(jìn)制轉(zhuǎn)二進(jìn)制代碼實(shí)例
- 10C語(yǔ)言查找數(shù)組里數(shù)字重復(fù)次數(shù)的方法
本欄相關(guān)
- 04-02c語(yǔ)言函數(shù)調(diào)用后清空內(nèi)存 c語(yǔ)言調(diào)用
- 04-02func函數(shù)+在C語(yǔ)言 func函數(shù)在c語(yǔ)言中
- 04-02c語(yǔ)言的正則匹配函數(shù) c語(yǔ)言正則表達(dá)
- 04-02c語(yǔ)言用函數(shù)寫(xiě)分段 用c語(yǔ)言表示分段
- 04-02c語(yǔ)言中對(duì)數(shù)函數(shù)的表達(dá)式 c語(yǔ)言中對(duì)
- 04-02c語(yǔ)言編寫(xiě)函數(shù)冒泡排序 c語(yǔ)言冒泡排
- 04-02c語(yǔ)言沒(méi)有round函數(shù) round c語(yǔ)言
- 04-02c語(yǔ)言分段函數(shù)怎么求 用c語(yǔ)言求分段
- 04-02C語(yǔ)言中怎么打出三角函數(shù) c語(yǔ)言中怎
- 04-02c語(yǔ)言調(diào)用函數(shù)求fibo C語(yǔ)言調(diào)用函數(shù)求
隨機(jī)閱讀
- 08-05DEDE織夢(mèng)data目錄下的sessions文件夾有什
- 01-10SublimeText編譯C開(kāi)發(fā)環(huán)境設(shè)置
- 08-05織夢(mèng)dedecms什么時(shí)候用欄目交叉功能?
- 04-02jquery與jsp,用jquery
- 01-10C#中split用法實(shí)例總結(jié)
- 08-05dedecms(織夢(mèng))副欄目數(shù)量限制代碼修改
- 01-11Mac OSX 打開(kāi)原生自帶讀寫(xiě)NTFS功能(圖文
- 01-11ajax實(shí)現(xiàn)頁(yè)面的局部加載
- 01-10delphi制作wav文件的方法
- 01-10使用C語(yǔ)言求解撲克牌的順子及n個(gè)骰子