数据库连接池库Libzdb

Libzdb 实现了一个小型、快速和易用的线程安全的连接池数据库API,可连接多种数据库,零配置,通过URL指定连接信息。
Libzdb官网:http://www.tildeslash.com/libzdb/

1 简介
一个非常小,简单的数据库连接池库。
1.1 特点
a、 线程安全。
b、连接不同的数据库系统。
c、 零运行时配置,连接使用URL。
d、目前支持的数据库MySQL, PostgreSQL, SQLite and Oracle。
e、 可以不断进行扩展。
1.2 支持平台及开发语言
1.2.1 OS
支持iOS、Linux、FreeBSD、Solaris、OpenBSD和其他 POSIX 系统。
1.2.2 语言
C、C++、Object C
2 技术框架
2.1 数据库连接池
连接池基本的思想是在系统初始化的时候,将数据库连接作为对象存储在内存中,当用户需要访问数据库时,并非建立一个新的连接,而是从连接池中取出一个已建立的空闲连接对象。使用完毕后,用户也并非将连接关闭,而是将连接放回连接池中,以供下一个请求访问使用。而连接的建立、断开都由连接池自身来管理。同时,还可以通过设置连接池的参数来控制连接池中的初始连接数、连接的上下限数以及每个连接的最大使用次数、最大空闲时间等等。也可以通过其自身的管理机制来监视数据库连接的数量、使用情况等。
2.2 线程安全
如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。或者说:一个类或者程序所提供的接口对于线程来说是原子操作或者多个线程之间的切换不会导致该接口的执行结果存在二义性,也就是说我们不用考虑同步的问题。
线程安全问题都是由全局变量及静态变量引起的。若每个线程中对全局变量、静态变量只有读操作,而无写操作,一般来说,这个全局变量是线程安全的;若有多个线程同时执行写操作,一般都需要考虑线程同步,否则的话就可能影响线程安全。

2.3 代理模式
为其他对象提供一种代理以控制对这个对象(过程化中,可以考虑一下特殊的接口,如数据库API接口)的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用;(a、职责清晰,真实的角色就是实现实际的业务逻辑,不用关心其他非本职责的事务,通过后期的代理完成一件完成事务,附带的结果就是编程简洁清晰。b、代理对象可以在客户端和目标对象之间起到中介的作用,这样起到了的作用和保护了目标对象的作用。c、高扩展性,假如引入其他数据库。

3、使用步骤
库结构如下:
在这里插入图片描述
1、URL对象创建
线程池根据URL对象创建,URL对象通过char* 形式的URL生成,url中已经包含数据库类型,数据库名 用户密码等参数;
2、开启连接池
ConnectionPool_new(URL_T url) 根据URL生成连接池对象ConnectionPool_T,
ConnectionPool_start(ConnectionPool_T t); 开启数据库连接池(默认连接池大小为5),如果想自定义,需在开启前使用ConnectionPool_setInitialConnections函数设置;
3、执行数据库SQL语句
获取连接之后,执行数据库SQL语句;
4、获得结果集
游标移动至结果集下一行intResultSet_next (ResultSet_T R), 结果无下一行则返回false ,否则返回true。

具体:http://www.tildeslash.com/libzdb/#api

猜你喜欢

转载自blog.csdn.net/heqiang2015/article/details/84825769