一,一个简单的程序:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<sys/types.h>
#include<zdb/zdb.h>
#include<zdb/Exception.h>
#include<zdb/Connection.h>
#include<zdb/URL.h>
int main(int agc,char** argv)
{
URL_T url = URL_new("mysql://127.0.0.1/test?user=root&password=123456");
if(url==NULL)
{
printf("URL parse ERROR!\n");
return 0;
}
ConnectionPool_T pool = ConnectionPool_new(url);
//设置初始化连接数目 (默认为5)
ConnectionPool_setInitialConnections(pool,5);
//设置最大连接数(默认为20)
ConnectionPool_setMaxConnections(pool,20);
//设置连接超时时间(默认为30s)
ConnectionPool_setConnectionTimeout(pool,5);
//开启线程池
ConnectionPool_start(pool);
//从线程池中取出连接(活动连接数+1)
Connection_T con[10];
for(int i = 0;i <10;i++)
{
con[i] = ConnectionPool_getConnection(pool);
if(con[i] == NULL)
{
printf("connect error!\n");
}
//输出全部连接数目
printf("ALL NUMBE:%d\n",ConnectionPool_size(pool));
//输出活动连接数目
printf("ACTIVE NUMBER:%d\n",ConnectionPool_active(pool));
printf("max:%d\n",ConnectionPool_getMaxConnections(pool));
}
//关闭连接(活动连接-1)
for(int i = 0;i < 10;i++)
{
if(con[i] == NULL) continue;
Connection_close(con[i]);
}
printf("ALL NUMBE:%d\n",ConnectionPool_size(pool));
printf("ACTIVE NUMBER:%d\n",ConnectionPool_active(pool));
printf("max:%d\n",ConnectionPool_getMaxConnections(pool));
//将连接池与数据库分离
ConnectionPool_stop(pool);
ConnectionPool_free(&pool);
URL_free(&url);
return 0;
}
二,编译方式及结果展示:
1.编译方式:g++ test.cpp -I /usr/local/include/zdb/ -o test -lzdb
2.结果展示:
(1)直接运行上述代码编译程序,结果如下:
ALL NUMBE:5
ACTIVE NUMBER:1
max:20
ALL NUMBE:5
ACTIVE NUMBER:2
max:20
ALL NUMBE:5
ACTIVE NUMBER:3
max:20
ALL NUMBE:5
ACTIVE NUMBER:4
max:20
ALL NUMBE:5
ACTIVE NUMBER:5
max:20
ALL NUMBE:6
ACTIVE NUMBER:6
max:20
ALL NUMBE:7
ACTIVE NUMBER:7
max:20
ALL NUMBE:8
ACTIVE NUMBER:8
max:20
ALL NUMBE:9
ACTIVE NUMBER:9
max:20
ALL NUMBE:10
ACTIVE NUMBER:10
max:20
ALL NUMBE:10
ACTIVE NUMBER:0
max:20
(2)ConnectionPool_setMaxConnections(pool,5),将最大连接数设置为5(注意最大连接数必须大于等于初始化连接数),结果如下:
ALL NUMBE:5
ACTIVE NUMBER:1
max:5
ALL NUMBE:5
ACTIVE NUMBER:2
max:5
ALL NUMBE:5
ACTIVE NUMBER:3
max:5
ALL NUMBE:5
ACTIVE NUMBER:4
max:5
ALL NUMBE:5
ACTIVE NUMBER:5
max:5
connect error!
ALL NUMBE:5
ACTIVE NUMBER:5
max:5
connect error!
ALL NUMBE:5
ACTIVE NUMBER:5
max:5
connect error!
ALL NUMBE:5
ACTIVE NUMBER:5
max:5
connect error!
ALL NUMBE:5
ACTIVE NUMBER:5
max:5
connect error!
ALL NUMBE:5
ACTIVE NUMBER:5
max:5
ALL NUMBE:5
ACTIVE NUMBER:0
max:5
3.结果分析:
(1)ConnectionPool_setInitialConnections(pool,5)只是设置初始化连接数目为5,当连接数超过该设置数时,会自动扩大该值,而不会连接出错;
(2)虽然连接数目会自动扩增,但是不会超过设置的最大连接数;
(3)当连接数目超过设置的最大连接数时,会出现连接数据库失败,而与数据库当前是否有可用连接数无关;