libzdb 连接mysql,数据库连接池库libzdb使用教程

Libzdb挺强大, 支持Mysql Oracle SQLite PostgreSQL,支持C和C++ Object C,不能在Window下用(看源码是因为基于Linux线程机制编写实现)。

遗憾的是找个资料太费劲,只能到Libzdb官网:点此进入 ,今正看着上面英文文档,突然网站就登不进去了,才发现国内论坛其实搜不出什么资料。

本文主要介绍Libzdb函数使用,帮理解英文文档有困难的朋友做下翻译。

库结构如下

c33175a4e6d333d5b23a3a129a1897ba4a81eeda9a8c8fb1.png

首先下载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语句

31cab95ddae2d1587366c648b333c0ac.png

此处T 代表 Connection_T , Connection_execute 用于执行数据库插入、更新、删除等操作。Connection_executeQuery用于数据库查询,返回结果集。

4、

游标移动至结果集下一行intResultSet_next (ResultSet_T R), 结果无下一行则返回false ,否则返回true。关于结果集其他操作函数如下

c6f3a6c2ac680e6d9bda3a0577688ee2.png

直接贴代码就好理解了:

#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;

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/534817.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数值分析方程求根实验matlab,数值分析实验之非线性方程求根(MATLAB实现)

一、实验目的1. 了解一般非线性方程的求根是比较复杂的事情:要讨论(或知道)它有无实根,有多少实根;知道求近似根常用的几种方法,每种方法的特点是什么。2. 用通过二分法(区间半分法)、不动点(也Picard)迭代…

iis php 数据库乱码,如何解决php插入数据乱码问题

php插入数据乱码的解决办法:首先要设置数据表的字符集为utf8;然后修改字符集格式;接着建立字符集为utf-8的数据库;最后通过php mysql语句插入数据即可。mysql数据库乱码问题解决办法我们在使用数据库(mysql)的时候最怕的就是数据库…

vc 通过句柄修改窗口大小_VC应用(1)通过VC修改销售订单行项目的字段

VC是SAP中非常重要的功能,过去多年来,我参与了不少使用VC的项目,我将通过多篇文章介绍VC的一些应用,本文介绍通过VC修改销售订单行项目的字段01 概览在销售订单创建时,对于可配置物料来说,不同的配置可能会…

springboot starter工作原理_98,谈谈SpringBoot的工作原理

对技术的探索,一切源于好奇心,保持好奇心,才能让人更年轻。至今,我们已经有了很多创建SpringBoot项目的经验,比如我们要创建一个支持web开发的项目,我们只需要引入web-starter模块即可。那么,Sp…

精英主义 遗传算法 matlab,遗传算法优化 - osc_lfs4vsih的个人空间 - OSCHINA - 中文开源技术交流社区...

1.遗传算法简介遗传算法是一种基于自然选择和群体遗传机理的搜索算法,它模拟了自然选择和自然遗传过程中的繁殖、杂交和突变现象.再利用遗传算法求解问题时,问题的每一个可能解都被编码成一个“染色体”,即个体,若干个个体构成了群体(所有可能解).在遗传算法开始时,总是随机的产…

php后台管理员登录密码错误,如果后台管理员的密码错误,我该怎么办,还有两种找回密码的方法...

Dedecms是中国著名的网站管理核心. 由于编织梦想简单易用,因此可以进行二次开发,并且可以实现各种网站. 在使用dedecms的过程中,如果忘记了梦想管理后台的密码怎么办?神山个人博客分享了两种修改(重置)管理员密码的方法.1. 下载织…

mac安装多php环境变量配置,Mac如何安装多个php版本

Mac安装多个php版本的方法:首先打开Mac上的终端工具,并确认安装Homebrew;然后安装【php5.5】及对应扩展;最后执行指令【brew unlink php55】删除brew中php的软链即可。Mac安装多个php版本的方法:1、打开Mac上的终端工具…

phpexcel 获取工作簿名称_工作分享 | Excel快速汇总考勤

点击蓝字关注我们每月月底,各位同事把考勤表报到部门后,检查核对再汇总一份总考勤表上报,传统的复制粘贴总是占用不少时间,还容易出错。为提高工作效率,现利用Excel实现考勤快速汇总。01 统一考勤模板,每个…

php进程通讯方式,PHP进程模型、进程通讯方式、进程线程的区别分别有哪些?

PHP进程模型是一个正在执行的程序,可以分配给处理器并由处理器执行的一个实体;PHP进程通讯方式有管道及有名管道,信号,共享内存等;PHP进程线程的区别有进程是资源的分配和调度的一个独立单元,而线程是CPU调…

iphone怎样关闭副屏_小米新设计专利曝光:“Z”型折叠屏手机

折叠屏手机可以说是最近几年的热门话题,虽然并未大面积普及,但已有多家厂商量产上市了旗下的折叠屏手机。同样作为知名厂商的小米,曾在此前展示过旗下的折叠屏手机视频,但并未真正发布。而近日曝光的一份小米旗下专利设计则表明小…

php socket开发斗地主,基于状态机模型的斗地主游戏(NodeJsSocketIO)

1. 系统结构系统考虑使用Nodejs和SocketIo实现服务器端逻辑,前端使用HTML5。2. 逻辑流程1 . 主要逻辑包括用户进入游戏、等待对家进入游戏、游戏过程、结束统计这4个过程。2 . 游戏过程的逻辑具体如下3 . 服务器-客户端通讯逻辑如下3. 客户端界面设计1 . 登录界面2 …

wgs84转经纬度_wgs84经纬度转为cgcs2000平面坐标

航拍测绘中,pos数据多数是wgs84,而GCP坐标是2000或者80坐标。有如下2情况需要转换坐标,1.不同坐标系刺点时,位置相差较远,影响工作效率。2.该软件不支持wgs84转国家2000,比如photoscan。所以需要把pos数据转为跟像控点…

oracle sql last_value,図でイメージするOracle DatabaseのSQL全集 第3回 分析関数

指定したソートキーでの、最初の行の値を求めるのが、First_Value関数。指定したソートキーでの、最後の行の値を求めるのが、Last_Value関数。指定したソートキーでの、(Row_Numberな順位が)n番目の行の値を求めるのが、nth_Value関数となります。Oracle11gR2でnth_Value関数が…

企业信息化投入中咨询服务_全过程工程咨询服务核心价值是什么

建筑行业服务现状传统建设工程的目标、计划、控制都以参与单位个体为主要对象,项目管理的阶段性和局部性割裂了项目的内在联系,导致项目管理存在明显的管理弊端,这种模式已经与国际主流的建设管理模式脱轨。“专而不全”、“多小散”企业的参…

交流信号叠加直流偏置_放大器偏置电流Ib需要完整的直流回路

多数工程师对于放大器偏置电流参数并不陌生,它是导致放大器电路产生直流噪声的又一重要影响因素。因为偏置电流经过输入端电阻网络会形成一个失调电压源,再通过电路的噪声增益影响输出直流噪声。所以工程师会注重电阻网络的匹配,降低偏置电流…

teamviewer类似软件_TeamViewer系统后台被黑客组织APT攻破,请注意防范

TeamViewer事件10月11日,深圳市网络与信息安全信息通报中心发布了一份编号为“2019029”的名为《关于TeamViewer客户端被远程控制的紧急通报》文件,文件指出目前知名远程办公工具TeamViewer已经被境外黑客组织APT41攻破,提醒企业组织做好防护…

软件测试用例_软件测试用例设计实战场景法

不点蓝字,我们哪来故事? 目录场景法扩展例子场景法介绍影子场景法用例设计举例场景法设计用例步骤和表示场景法举例 总结 场景法的注意点场景法影子本来想直接跳过场景法的,今天群友提出问题:1、面试官问:场景…

树莓派摄像头_Arducam 8MP重磅来袭,为树莓派4B构建完全同步的双摄像头方案~

大家好,我是小月月。双目立体景深一直是很热门的项目,最近已经有不少小伙伴学会在树莓派上插两个USB摄像头了,这个方案可以识别静态场景中各个物体的距离远近。但是两个USB摄像头捕获到的两组图像序列的时间并不是严格同步的,对运…

稀疏自编码器_自编码(AutoEncoder)模型及几种扩展之二

4. 稀疏自编码假设我们只有一个没有类别标签的训练样本集合{x(1),x(2)...},一个自编码神经网络就是一种非监督学习算法,它使用BP算法,并将目标值设为: y(i)x(i)。我们的目标是希望得到hW,b(X)≈x。用aj(2)(x)表示输入向量x对隐藏层单元j的激活…

linux x86 关机 过程,linux在x86上的中断处理过程(详细)

Linux在x86上的中断处理过程一:引言在Intel的文档中,把中断分为两种。一种是异常,也叫同步同断。一种称之为中断,也叫异常中断。同步中断指的是由CPU控制单元产生,之所以称之为同步,是因为只有一条指令执行完毕后才会发出中断。例如除法运算中,除数为零的时候,就会产…