03 10月 2007

MySQL++使用教學

MySQL++是一套提供C++程式可以對MySQL的Database做存取的Library。雖然MySQL原本就有提供mysql.h供人使用,但我認為MySQL++對學習C++的人而言,語法非常的簡易好用,整個用法感覺上跟PHP很像,如果學過PHP & C++的人,應該很快就能上手了~

MySQL++的相關網站:
首頁
Documentation
Simple Example

MySQL++執行環境:
‧GCC 3.x and 4.x on recent x86 Linuxes,
‧GCC 4.x from Xcode 2.x on Mac OS X 10.4
‧Visual C++ 2005 on 32-bit Windows.

而我的安裝環境是Linux的Ubuntu以下就針對Ubuntu的用者說明安裝過程
安裝MySQL++ in Ubuntu:

% sudo apt-get install libmysql++-dev  
% sudo apt-get install mysql-client-5.0

很簡單吧....不知不覺的,安裝結束了 XD,記得重開機一下,這樣等等compile程式時才抓得到library

Compile程式所需要相關MySQL++的參數:

% g++ [code-file-name] -I/usr/include/mysql++ -I/usr/include/mysql  \
-lmysqlpp -lmysqlclient

  • -I/usr/include/mysql
    • 因為MySQL++的程式都是建立在MySQL提供的mysql.h上,所以必須指名include mysql.h的路徑,這個路徑就因機器而異了,你可以locate mysql.h看看,我所寫的是Ubuntu預設的路徑
  • -I/usr/include/mysql++
    • 這個就是MySQL++的header file存放的路徑。
  • -lmysqlpp -lmysqlclient
    • 在linking time時,compiler會使用到這兩個系統註冊的library檔


MySQL++的基本類別(class)說明:
這些類別都是在mysqlpp的namespace底下,如果要使用的話,必須在程式開始就宣告using namespace mysqlpp,或是在程式中每個類別前都加上mysqlpp::Connection、mysqlpp::Query、等等。

  • Connection -- 可以與DB連線
  • Query -- 可對與DB連線的Connection下指令
  • Result -- 儲存Query執行後的結果值
  • Row -- 儲存Result中每一筆的內容


以下有個我參考官網附的Example修改的code,加上一點中文註解,希望有興趣的人可以更快學會MySQL++

#include <mysql++.h>
#include <iostream>

//這樣子之後的code裡的Connection, Query, Result, Row...
// 前面就不用加mysqlpp::
using namespace mysqlpp;
using namespace std;

int main(int argc, char *argv[])
{
/*** 連結到input輸入的argument的DB ***/
// Input argument format
// ./a.out <DB-Name> <DB-Host-IP> <Name> <Password>
Connection con(false);
if ( !con.connect( argv[1], argv[2], argv[3], argv[4] ) ){
cerr<<"connect DB error..."<<endl;
return -1;
}

/*** 從DB撈資料出來 ***/
Query query = con.query();// create一個Query
// 可以對con做讀取or寫入
query << "SELECT item FROM mydb";//輸入要query的command
Result res = query.store();//執行query,並把結果存至Result res

/*** 秀出所有的result set ***/
cout << "We have : " << endl;
if (res) {//如果res有抓到東西的話....

Row row;//row可儲存每一列的資料
Row::size_type i;
for (i = 0; row = res.at(i); ++i) {
cout << 't' << row.at(0) << endl;
}
}
else {
//秀出Query產生的Error
cerr << "Failed to get item list: "
<< query.error() << endl;
return -1;
}

return 0;
}

3 則留言:

Andy Liu 提到...

想請教一下,如果要在Windows上使用,需要怎樣安裝呢?

或是哪邊有文件可以參考呢?謝謝。

Falldog 提到...

若要在Windows上使用,在MySQL++首頁上有提到,有幾種環境可以:Visual C++ 6、Visual C++ 2005、Cygwin、C++Builder(大部分可以)

至於安裝的方法,在下載下來的source code裡面有README.vc有寫

也有個版本,mysql++-1.7.1-win32-vc++.zip可在Visual C++6上使用

你參考看看吧,我是沒在Windows上用過啦@_@

Andy Liu 提到...

謝謝你喔,我在試試看囉~^^