libzdb 连接mysql,数据库连接池库libzdb使用教程
Libzdb挺強(qiáng)大, 支持Mysql Oracle SQLite PostgreSQL,支持C和C++ Object C,不能在Window下用(看源碼是因?yàn)榛贚inux線程機(jī)制編寫實(shí)現(xiàn))。
遺憾的是找個(gè)資料太費(fèi)勁,只能到Libzdb官網(wǎng):點(diǎn)此進(jìn)入?,今正看著上面英文文檔,突然網(wǎng)站就登不進(jìn)去了,才發(fā)現(xiàn)國內(nèi)論壇其實(shí)搜不出什么資料。
本文主要介紹Libzdb函數(shù)使用,幫理解英文文檔有困難的朋友做下翻譯。
庫結(jié)構(gòu)如下
首先下載libzdb的源碼安裝包,解壓,在目錄下執(zhí)行./configure ?make make install 安裝。。以我自己為例,裝完后再/usr/local/lib下有對應(yīng)庫文件
源碼安裝包 ?點(diǎn)此下載
1
線程池根據(jù)URL對象創(chuàng)建,URL對象通過char* 形式的URL生成,url中已經(jīng)包含數(shù)據(jù)庫類型,數(shù)據(jù)庫名 用戶密碼等參數(shù)。形如:
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) 根據(jù)URL生成連接池對象ConnectionPool_T,
ConnectionPool_start(ConnectionPool_T t); 開啟數(shù)據(jù)庫連接池(默認(rèn)連接池大小為5),如果想自定義,需在開啟前使用ConnectionPool_setInitialConnections函數(shù)設(shè)置。用法如下:
從數(shù)據(jù)庫池中獲取一個(gè)連接(此時(shí)活動(dòng)連接+1):Connection_T ConnectionPool_getConnection (T P);
使用完畢后將連接放回連接池(此時(shí)活動(dòng)連接-1):voidConnection_close (Connection_T C)
或者voidConnectionPool_returnConnection (T P, Connection_T connection)
3、
獲取連接之后,執(zhí)行數(shù)據(jù)庫SQL語句
此處T 代表 Connection_T , Connection_execute 用于執(zhí)行數(shù)據(jù)庫插入、更新、刪除等操作。Connection_executeQuery用于數(shù)據(jù)庫查詢,返回結(jié)果集。
4、
游標(biāo)移動(dòng)至結(jié)果集下一行intResultSet_next (ResultSet_T R), 結(jié)果無下一行則返回false ,否則返回true。關(guān)于結(jié)果集其他操作函數(shù)如下
直接貼代碼就好理解了:
#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);
//設(shè)置初始化連接數(shù)目
ConnectionPool_setInitialConnections(pool,20);
//開啟線程池
ConnectionPool_start(pool);
//從線程池中取出連接(活動(dòng)連接數(shù)+1)
Connection_T con = ConnectionPool_getConnection(pool);
//執(zhí)行SQL語句,返回結(jié)果集
ResultSet_T result = Connection_executeQuery(con, "select * from AlipayTrans");
//輸出全部連接數(shù)目
printf("ALL NUMBE:%d
",ConnectionPool_size(pool));
//輸出活動(dòng)連接數(shù)目
printf("ACTIVE NUMBER:%d
",ConnectionPool_active(pool));
while(ResultSet_next(result)) //游標(biāo)滑到下一行
{
//獲取列名 ResultSet_getColumnName
//獲取列值 ResultSet_getString
printf("column: %s
",ResultSet_getColumnName(result,2));
//根據(jù)列名獲取值ResultSet_getStringByName
printf("%s
",ResultSet_getStringByName(result,"result_code"));
//根據(jù)列索引獲取列值 [注意索引是從1開始不是0]
printf("%s
",ResultSet_getString(result,3));
}
//關(guān)閉連接(活動(dòng)連接-1)
Connection_close(con);
//將連接池與數(shù)據(jù)庫分離
ConnectionPool_stop(pool);
ConnectionPool_free(&pool);
URL_free(&url);
return 0;
}
總結(jié)
以上是生活随笔為你收集整理的libzdb 连接mysql,数据库连接池库libzdb使用教程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux添加新硬盘-挂载硬盘,设置开机
- 下一篇: 知识蒸馏 knowledge disti