Qt 的 MySQL 驅動程式


在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進行程式編譯了。下圖為程式執行時的參考畫面: