Qt 的 MySQL 驅動程式

那天帶著剛滿月的小女兒回家,跟我媽在那邊聊天時,聊到我小時候,我說希望小女兒像我老婆一樣聰明,我說的是實話,因為我媽也跟著說,我其實不聰明,但就是努力,還談到,以前我小時候因為笨,唸書記不住課文,必須要唸出聲來才比較記得住課文,有一次我爸工作下班回來很累,我又在隔壁房間大聲唸書,搞的他覺得吵大發脾氣,也因此我才改默唸的方式來記課文,剛開始記得非常慢,花了好一段時間才適應。

不知道為什麼,很多人覺得我很聰明,也有很多人以為我求學一定是一帆風順的那種人,其實,我求學過程真的不平順,有些東西講給我老婆聽,她還會大笑,說怎麼這麼誇張,這個以後有機會再談談好了,總之,我還是覺得自己很笨,記不住許多細節,數字我尤其不在行,我就從來記不住JSR的編號,現在有關數字的東西,一律交給我老婆,我也樂得輕鬆。

也因為求學過程並不平順,對於學習的挫折感受遠比一些人深,也因此我特別重視學習的方式與技巧,會去分辨一些細節瑣碎的東西,儘量不去強記那些東西枝微末節,而常會去把一件東西釐清出核心的東西,把我的腦容量儘量空出來給這些核心的東西用。

就像是今天試的東西,Qt的MySQL驅動程式編譯,其實就是一堆指令組合的成份居多,試出來之後,我通常就記不得了,老是在嘗試與遺忘之間,我覺得是件很浪費時間的事,這些東西沒什麼,就是得花點時間嘗試,所以應該記下來,以後有要用到,就照著再作一遍就好了。

以下是Qt的東西了,屬於技術細節,沒興趣的就不用往下看了。。XD

在Qt線上文件 SQL Database Drivers 中有提及如何建構Qt的資料庫驅動程式,在這邊簡介一下,如何在Windows下使用Qt OpenSource 4.3.3自行編譯MySQL驅動程式的plugin。

  1. 安裝MySQL時必須有Include Files / Lib Files選項
首先是當您在安裝MySQL的時候,必須選擇自訂安裝,並選擇安裝Include Files / Lib Files,安裝完成時在MySQL安裝目錄下,會有include目錄與lib目錄,如果您先前沒有選擇安裝Include Files / Lib Files,則只要再執行一次MySQL安裝程式,選擇「Modify」項目,即可再增加Include Files / Lib Files的安裝。

  1. 複製MySQL的include與lib目錄
若MySQL預設的安裝目錄名稱中預設有空白(例如MySQL Server 5.0這樣的名稱),在編譯驅動程式時會有問題,您可以建立一個mysql目錄,例如c:\mysql,然後將MySQL的include與lib目錄複製至c:\mysql之中。

  1. 下載 mingw-utils
下載mingw-utils-0.3.tar.gz,將之解壓縮,將其中的reimp複製至MinGW的bin目錄中。

  1. 使用reimp與dlltool
開啟文字模式主控台,執行以下指令:
cd c:\mysql\lib\opt

reimp -d libmysql.lib

dlltool -k -d libmysql.def -l libmysql.a

  1. 編譯驅動程式
在文字模式主控台中執行以下指令,%QTDIR%為您的Qt安裝路徑環境變數:
cd %QTDIR%\src\plugins\sqldrivers\mysql

qmake -o Makefile "INCLUDEPATH+=C:\mysql\include" "LIBS+=C:\mysql\lib\opt\libmysql.a" mysql.pro

make

完成以上的步驟並編譯完成之後,可以在Qt安裝目錄中的plugins\sqldrivers目錄中,找到編譯好的MySQL驅動程式plugin。

接下來可以編寫程式測試資料庫連結,Qt的資料庫支援是放置在QtSql模組之中,您可以使用QSqlDatabase的靜態addDatabase() 方法指定"QMYSQL",這會載入驅動程式並傳回QSqlDatabase實作物件,之後可以使用setHostName()、 setDatabaseName()、setUserName()、setPassword()等方法,設定資料庫的URL位址、資料庫名稱、使用者與密 碼,然後使用open()方法開啟連線,使用close()方法關閉連線。

下面這個程式是個簡單示範:
#include <QApplication>
#include <QtSql>
#include <QLabel>

bool createConnection() {
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");

db.setHostName("localhost");
db.setDatabaseName("demo");
db.setUserName("root");
db.setPassword("123456");

if (!db.open()) {
return false;
}

db.close();

return true;
}

int main(int argc, char *argv[]) {
QApplication app(argc, argv);

QLabel *label = new QLabel;
label->setWindowTitle("Qt Database");

if(createConnection()) {
label->setText("<h1>Connected to database!</h1>");
}
else {
label->setText("<h1>Connection fail!</h1>");
}

label->show();

return app.exec();
}

接著執行qmake -project產生.pro檔案,為了要連結QtSql模組,記得編輯.pro檔案,在當中加上一行:
QT += sql

接著就可以再次執行qmake產生Makefile,執行make進行程式編譯了。下圖為程式執行時的參考畫面:



迴響:

真特別的開場白。上文「記不住JSR的編號」不重要,只要「記住JSeRv的帳號」就好 XD

原來 Win32 下 MySQL driver for Qt4 建構這麼麻煩呀!

由...發表 jserv on 四月 01, 2008 at 08:21 下午 CST #

上文「記不住JSR的編號」不重要,只要「記住JSeRv的帳號」就好 <--- 這樣也行。。Orz....

由...發表 良葛格 on 四月 01, 2008 at 09:16 下午 CST #

請問QT4如何連INFORMIX資料庫,
可以幫忙嗎,到處都找不到啊
開發環境為WINDOWS xp
執行環境為Solaris

由...發表 andyyeng on 九月 30, 2008 at 08:23 下午 CST #

發表迴響:
  • HTML 語法: 關閉

Search







follow caterpillar at http://twitter.com


Feeds

Referers

Navigation