数据连接池的基本实现

 

 

1、 实现途径:

编写JdbcPool implements java.sql.DataSource类

l 静态初始化块

l getConnection()

l release()

总结:

可以解决连接池的实现问题,但是必须要求编程人员熟悉JdbcPool的使用

解决此问题的方法——增强Connection的功能

2、 方案列表:

1) 编写Connection的子类,此方法理论上可以解决,但是没有可操作性,因为基本无法实现对Connection对象的初始化工作

2) 采用装饰模式

装饰模式解决方案

用包装设计模式对connnction的close方法进行增强

1.写一个类实现与被增强对象相同的接口

2.在类中定义一个变量记住被增强对象

3.在类中定义一个构造函数,接收被增强对象

4.覆盖想增强的方法

5.对于不想增强的方法,直接调用目标对象(被增强对象)的方法

总结:

装饰模式可以很好的解决问题,但是在此任然不合适,因为Connection接口中定义了太多的方法,逐个去实现非常繁琐

3) 动态代理技术实现

public Connection getConnection() throws SQLException {
if(list.size()>0){
final Connection conn = list.removeFirst(); //mysql
System.out.println("用户从池中拿走了:" + conn);
System.out.println("池的大小为" + list.size());
//myconnection preparedstatement commit close
return (Connection)Proxy.newProxyInstance(JdbcPool.class.getClassLoader(), conn.getClass().getInterfaces(), new InvocationHandler(){
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
if(!method.getName().equalsIgnoreCase("close")){
return method.invoke(conn, args);
}
System.out.println(conn + "被还到池中了");
list.add(conn);
System.out.println("池的大小为" + list.size());
return null;
}
});
/* MyConnection myconn = new MyConnection(conn,list);
return myconn; // conn = pool.getConnection(); conn.preparedstatment conn
*/ }else{
throw new RuntimeException("对不起,数据库忙,请等会再来!!");
}
}

                                                                                                                                            2011年11月18日 18:30:38

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值