https://blog.csdn.net/ilvu999/article/details/8050302
https://www.cnblogs.com/heling/archive/2013/06/05/3118573.html
原文 http://1029975378-qq-com.iteye.com/blog/1310910
昨天是一場(chǎng)經(jīng)過(guò)了如此糾結(jié)的MySQL數(shù)據(jù)庫(kù)的卸載再安裝的洗禮的一天,今天的在Windows下Qt驅(qū)動(dòng)MySQL數(shù)據(jù)庫(kù)也是歷經(jīng)千辛萬(wàn)苦才到達(dá)成功的彼岸的。雖然遇到了各種亂七八糟的問(wèn)題,不過(guò)總算是圓滿(mǎn)解決,這也是令人欣慰的一點(diǎn)吧。謹(jǐn)以此文紀(jì)念下我的艱難曲折。如果能為大家提供一些幫助,我將不勝榮幸。
MySQL不能選擇Typical型,這樣會(huì)缺少庫(kù)文件。可以選擇Full型或Custom型。我安裝的MySQL是Typical型的,所以在lib目錄下是沒(méi)有opt文件夾的,因此進(jìn)行了重新安裝(積累了N多經(jīng)驗(yàn),這次安裝可算是小菜一碟)。為了圖方便,我直接選擇了Full型的,但這樣會(huì)存在一個(gè)問(wèn)題,MySQL默認(rèn)的安裝路徑是C:\Program Files\MySQL\MySQL Server 5.1,這個(gè)路徑中存在空格,這會(huì)在后面的操作中出現(xiàn)問(wèn)題。我的解決方案是在C盤(pán)下直接新建一個(gè)mysql文件夾,將C:\Program Files\MySQL\MySQL Server 5.1\include 和C:\Program Files\MySQL\MySQL Server 5.1\lib目錄拷到C:\mysql文件夾下。
安裝好MySQL后,進(jìn)行Qt的安裝。將Qt下的bin和QT\qt\bin配置環(huán)境變量。
Qt是集成了mingw的,看到網(wǎng)上說(shuō)要下載MinGW,不管三七二十一,我也下載安裝了一下。將MinGW的bin配置環(huán)境變量。
mingw使用的庫(kù)和msvc使用的不同格式的庫(kù)而引起的。而mysql只提供了msvc可使用的庫(kù),所以需要下載一個(gè)動(dòng)態(tài)庫(kù)格式轉(zhuǎn)換工具,網(wǎng)址為: http://www.qtcn.org/download/mingw-utils-0.3.tar.gz,解壓后把里邊bin目錄里的remip.exe拷到mingw的bin目錄。我是把reimp.exe同時(shí)也放到了MinGW的bin下(我也不知道有沒(méi)這必要,一來(lái)是首次接觸Qt這東東,二來(lái)也沒(méi)看到網(wǎng)上詳細(xì)的解釋?zhuān)?/p>
以下為本人機(jī)器上的命令行操作,路徑請(qǐng)修改為自己設(shè)置的:
過(guò)程:
1:從libmysql.lib生成libmysql.a文件(mingw使用的靜態(tài)鏈接文件為linux格式 *.a)
>>C:
>>cd mysql\lib\opt
>>reimp -d libmysql.lib (生成 libmysql.def文件)
>>dlltool -k -d libmysql.def -l libmysql.a (生成 libmysql.a文件)
2:生成Qt下的mysql驅(qū)動(dòng):
>>cd \
>>cd qt\src\plugins\sqldrivers\mysql
>>QMAKE -o Makefile "INCLUDEPATH+=C:\mysql\include" "LIBS+=C:\mysql\Llib\opt\libmysql.a" mysql.pro
>>mingw32-make
在這個(gè)時(shí)候,我遇到問(wèn)題。在執(zhí)行完QMAKE -o Makefile "INCLUDEPATH+=C:\mysql\include" "LIBS+=C:\mysql\Llib\opt\libmysql.a" mysql.pro
會(huì)出現(xiàn)警告。
WARNING: (internal):1: Unescaped backslashes are deprecated.
WARNING: (internal):1: Unescaped backslashes are deprecated.
WARNING: (internal):1: Unescaped backslashes are deprecated.
遇到該警告,也有看到網(wǎng)上有相應(yīng)的解決方法,現(xiàn)在也把它放上來(lái)以供參考。但貌似這警告對(duì)后面的執(zhí)行沒(méi)有影響。
用記事本打開(kāi)D:\Qt\2010.05\qt\src\plugins\sqldrivers\mysql\ mysql.pro文件,在第二行加入: INCLUDEPATH += "C:/Program Files/MySQL/MySQL Server 5.1/include" LIBS += "C:/Program Files/MySQL/MySQL Server 5.1/lib/opt/libmysql.lib" 并保存.
(其實(shí)我也比較困惑這個(gè)問(wèn)題,我覺(jué)得應(yīng)該是在第二行加入:INCLUDEPATH+="C:\mysql\include" LIBS+="C:\mysql\Llib\opt\libmysql.a" 這只是我的猜測(cè),我也沒(méi)試過(guò)。呵呵~)
在執(zhí)行mingw32-make時(shí),出現(xiàn)了一堆vc98的問(wèn)題,在網(wǎng)上看了蠻多的博文,都沒(méi)有看到類(lèi)似的問(wèn)題,不過(guò)踏破鐵鞋無(wú)覓處得來(lái)全不費(fèi)工夫,終于在某篇博文上看到了這個(gè)問(wèn)題,博主也給出了解決方法。造成一堆亂78糟的vc98問(wèn)題的原因是在裝vc98時(shí)自動(dòng)的配置了環(huán)境變量include 和 lib ,先刪了這兩個(gè)環(huán)境變量,執(zhí)行完mingw32-make命令后再重新配置回去就沒(méi)有問(wèn)題了。
成功執(zhí)行后,會(huì)E:\QT\qt\plugins\sqldrivers下生成下面四個(gè)文件。
- qsqlmysql4.dll
- libqsqlmysql4.a
- qsqlmysqld4.dll
- libqsqlmysqld4.a
這樣,終于,Qt可以驅(qū)動(dòng)Mysql了。
接下來(lái)寫(xiě)下測(cè)試程序。
頭文件引入:
#include <QSqlDatabase>
#include <QSqlError>
測(cè)試代碼:
Cpp代碼

- QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
- db.setHostName("localhost");
- db.setDatabaseName("gamesql");
- db.setUserName("root");
- db.setPassword("netjava");
- bool ok = db.open();
- if(!ok){
- qDebug()<<"failuer";
- qDebug()<<db.lastError();
- }else{
- qDebug()<<"success";
- }
注意,要在項(xiàng)目的pro文件下加入
QT +=sql
才可以。
QT += core gui QT +=sql TARGET = test TEMPLATE = app
好了,這樣一切OK啦~~
就一個(gè)簡(jiǎn)單的配置驅(qū)動(dòng)問(wèn)題,弄了一天,整個(gè)人就屬于焦頭爛額的狀態(tài),不過(guò)收獲還是有的嘛。在塵埃落定的那一刻,還是蠻開(kāi)心的~~(*^__^*) ~~
驅(qū)動(dòng)安裝問(wèn)題小結(jié)一下:
1.MySQL的include和lib路徑中不能含有空格。
2.下載mingw-utils-0.3.tar.gz 將其解壓后的reimp.exe放到mingw下,執(zhí)行生成libmysql.a文件
3.配置Qt環(huán)境變量。同時(shí)我也把WinGW也配置了環(huán)境變量(我不知道這是否必要)。
4.用qmake和make命令生成MySQL驅(qū)動(dòng)。
4.警告解決,用記事本打開(kāi)D:\Qt\2010.05\qt\src\plugins\sqldrivers\mysql\ mysql.pro文件配置文件。
5.如果有vc98相關(guān)環(huán)境變量,將vc98的環(huán)境變量先刪了,裝好后再恢復(fù)。
希望能對(duì)大家有幫助~~