MySQL++

供 C++ 使用的 MySQL library。

Installation

in Fedora

1
$ sudo yum install mysql mysql-devel mysql++-devel

in Ubuntu

1
$ sudo apt-get install libmysql++-dev

How to use

include file and namespace

1
2
3
#include <mysql++.h>

using namespace mysqlpp;

compile

1
g++ -o <obj file> <source file> -I/usr/include/mysql++ -I/usr/include/mysql -lmysqlpp -lmysqlclient

Exception

出錯時會噴 exception,如果不 catch exception,process 會被 abort。用 catch 處理各種 error 比較好。

BadQuery Exception

query 出錯時可以用 catch BadQuery exception 的方式取得 error 資訊。

1
2
3
4
5
6
7
try {
query.exec();
}
catch ( BadQuery e ) {
cerr << e.errnum() << endl;
cerr << e.what() << endl;
}

BadFieldName Exception

access Row 不存在欄位會噴的 excpetion,例如:

1
2
3
4
5
6
sql = "SELECT name FROM test";
db.execSql(sql, result);

Row row = result[0];
cout << string(row["name"]) << endl;
cout << string(row["id"]) << endl; // 這裡會噴 BadFieldName

Sample Code

使用 Connection 物件建立 DB 連線,用 Query 物件設定執行 SQL query,可用 StoreQueryResult 物件取得 query 的結果,在運用 Row 物件取得每一筆資料。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void foo()
{
Connection *conn = new Connection();
Query query;
StoreQueryResult result;
Row row;

if ( !conn->connect("dbname", "127.0.0.1", "user", "pwd") ) {
cerr << "Error: Fail to connect to DB." << endl;
return;
}

query = conn->query();
query << "SELECT * FROM `testtable`";
result = query.store();
row = result[0];
}

至於 Query 的 exec() 跟 store() 有什麼差,還要再研究…

Ref