Libzdb挺強大, 支持Mysql Oracle SQLite PostgreSQL,支持C和C++ Object C,不能在Window下用(看源碼是因為基于Linux線程機制編寫實現)。
遺憾的是找個資料太費勁,只能到Libzdb官網:點此進入?,今正看著上面英文文檔,突然網站就登不進去了,才發現國內論壇其實搜不出什么資料。
本文主要介紹Libzdb函數使用,幫理解英文文檔有困難的朋友做下翻譯。
庫結構如下
首先下載libzdb的源碼安裝包,解壓,在目錄下執行./configure ?make make install 安裝。。以我自己為例,裝完后再/usr/local/lib下有對應庫文件
源碼安裝包 ?點此下載
1
線程池根據URL對象創建,URL對象通過char* 形式的URL生成,url中已經包含數據庫類型,數據庫名 用戶密碼等參數。形如:
database://[user:password@][host][:port]/database[?propertyName1][=propertyValue1]
MYSQL訪問:
mysql://localhost:3306/test?user=root&password=swordfish
mysql://root:swordfish@localhost:3306/test
ORACLE訪問:
oracle://localhost:1521/test?user=scott&password=tiger
oracle:///servicename?user=scott&password=tiger
SQLITE訪問:
sqlite:///var/sqlite/test.db?synchronous=normal&heap_limit=8000&foreign_keys=on
PostgreSQL訪問:
postgresql://root:swordfish@localhost/test?use-ssl=true
postgresql://localhost:5432/test?user=root&password=swordfish
2、
開啟連接池
ConnectionPool_new(URL_T url) 根據URL生成連接池對象ConnectionPool_T,
ConnectionPool_start(ConnectionPool_T t); 開啟數據庫連接池(默認連接池大小為5),如果想自定義,需在開啟前使用ConnectionPool_setInitialConnections函數設置。用法如下:
從數據庫池中獲取一個連接(此時活動連接+1):Connection_T ConnectionPool_getConnection (T P);
使用完畢后將連接放回連接池(此時活動連接-1):voidConnection_close (Connection_T C)
或者voidConnectionPool_returnConnection (T P, Connection_T connection)
3、
獲取連接之后,執行數據庫SQL語句
此處T 代表 Connection_T , Connection_execute 用于執行數據庫插入、更新、刪除等操作。Connection_executeQuery用于數據庫查詢,返回結果集。
4、
游標移動至結果集下一行intResultSet_next (ResultSet_T R), 結果無下一行則返回false ,否則返回true。關于結果集其他操作函數如下
直接貼代碼就好理解了:
#include
#include
#include
#include
#include
#include
#include
#include
/*
* 作者:擱淺的貝
* 編譯方式:gcc main.c -I /usr/local/include/zdb/ -o main -lzdb
* */
int main(int agc,char** argv)
{
URL_T url = URL_new("mysql://localhost/AllinpayDB?user=root&password=root");
if(url==NULL)
{
printf("URL parse ERROR!
");
return 0;
}
ConnectionPool_T pool = ConnectionPool_new(url);
//設置初始化連接數目
ConnectionPool_setInitialConnections(pool,20);
//開啟線程池
ConnectionPool_start(pool);
//從線程池中取出連接(活動連接數+1)
Connection_T con = ConnectionPool_getConnection(pool);
//執行SQL語句,返回結果集
ResultSet_T result = Connection_executeQuery(con, "select * from AlipayTrans");
//輸出全部連接數目
printf("ALL NUMBE:%d
",ConnectionPool_size(pool));
//輸出活動連接數目
printf("ACTIVE NUMBER:%d
",ConnectionPool_active(pool));
while(ResultSet_next(result)) //游標滑到下一行
{
//獲取列名 ResultSet_getColumnName
//獲取列值 ResultSet_getString
printf("column: %s
",ResultSet_getColumnName(result,2));
//根據列名獲取值ResultSet_getStringByName
printf("%s
",ResultSet_getStringByName(result,"result_code"));
//根據列索引獲取列值 [注意索引是從1開始不是0]
printf("%s
",ResultSet_getString(result,3));
}
//關閉連接(活動連接-1)
Connection_close(con);
//將連接池與數據庫分離
ConnectionPool_stop(pool);
ConnectionPool_free(&pool);
URL_free(&url);
return 0;
}