自定义连接池

自定义连接池,连接池的到的连接和通过参数获取的连接之间的差别
自定义连接池的特点:
1:初始时需要创建连接 Connnection con = DataSourse.getConnection();(如果直接调用这个方法的话
那么创建的连接在关闭的时候便会被销毁,所以还需要装饰者模式来增强这个con,)
2: 对外提供getConnection()这个方法。
3:当使用者调用那个close()这个方法时,不能销毁连接,只能把它归还给池对象。
===========
提到装饰者模式。来详细的说一下。
口诀:是你还有你,一切拜托你。
在java中类和类之间的关系有三种:
1:is ----> 是一个 class A extends B{}
2:has ----> 有一个 class A{private B b;}
3:use ----> 用一个 class A{public void eat(B b){}}

通过装饰者模式对Connection进行包装:
(这个只是示意代码)
class Myconn impelments Connection{
 private static Connection con;//创建底层对象
 privare datic ItcastDateSourse dataSourse;//创建池对象
 //创建Myconn对象时,需要传递底层对象
 public Myconn(ItcastDataSourse dataSourse,Connection con){
     this.con = con;
    this.dataSourse = dataSourse;
 }
        public void close(){
  return this.dataSouse.add(this) 
  
 }
class ItcastDataSourse {
   private List<Myconn> connList = new ArrayList<Myconn>():
 public ItcastDataSourse(){
  //通过循环和四大参数要创建3个连接
  String user = "root";
  String password = "123456";
  String DriverClass("com.mysql.jcbc.Driver");
  String url = "jdbc:mysql://localhost:3306/student";
  Class.forName(DriverClass);
  //创建底层对象
  Connection con = DriverManager.getConnection(user,url,password);
  //创建包装对象
  Myconn  myconn = new Myconn(this,myconn);
  //把包装对象添加到池中
  connList.add(myconn);
  
  }
 //增强getconnection方法
 public Connection getConnection(){
  if(connList.size == 0){
   throw new RuntimeException("别要了。连接没了,等一会!"); 
  }
  return connList.remove(0);//移除并且返回下标诶0 的连接 
 }
 //增强close方法
 public void add(Myconn mycon){
  this.connList.add(mycon);
 }
}
完整代码如下:
public class Myconn implements Connection {
 private static Connection con ;//创建底层对象
 //创建池对象
 private static ItcastDataSourse dataSourse;
 
 public Myconn(ItcastDataSourse dataSourse,Connection con) {
  this.dataSourse = dataSourse;
  this.con = con;
 }
 
 //关闭方法
 public void close() throws SQLException {
  this.dataSourse.add(this);
 }
 }

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public class ItcastDataSourse {
 //泛型创建连接集合
 private static List<Myconn> connList  = new ArrayList<Myconn>();
 //初始化池的时候,创建3个连接对象。
 public ItcastDataSourse() throws ClassNotFoundException, SQLException {
  //四大连接参数
  String user = "root";
  String password ="123456";
  String className = ("com.masql.jdbc.Driver");
  Class.forName(className);
  String url ="jdbc:mysql://localhost:3306/student";
  //循环创建3个连接对象
  for(int i=0;i<3;i++) {
   //创建底层对象
   Connection con = DriverManager.getConnection(url, user, password);
   //创建包装对象
   Myconn myconn = new Myconn(this,con);
   //把连接添加到池中
   connList.add(myconn);
  }
 }
 //包装getconnection方法
 public  Connection getConnection() {
  if(connList.size() == 0) {
   throw new RuntimeException("别要了,连接没有了,要等一会啊!");
  }
  return this.connList.remove(0);
 }
 
 //包装close方法
 public void add(Myconn myconn) {
  
  this.connList.add(myconn);
 }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值