【事务】连接池

一通过addBack()返回conn

在这里插入图片描述在这里插入图片描述
代码:
1.DataSource

public class MyDataSource implements DataSource {
    List<Connection> list = new ArrayList<Connection>();
    public MyDataSource(){
        for (int i=0;i<10;i++){
            Connection connection = JDBCUtils.getConn();
            list.add(connection);
        }
    }
    public Connection getConnection() throws SQLException {
        if (list.size()==0){
            for (int i=0;i<5;i++){
                Connection connection = JDBCUtils.getConn();
                list.add(connection);
            }
        }
        Connection conn =list.remove(0);
        return conn;
    }
    //用完之后的归还
    public void addBack(Connection conn){
        list.add(conn);
    }

2.Test

   @Test
    public void polltest(){
        MyDataSource mds = new MyDataSource();
        Connection conn = null;
        PreparedStatement pst = null;
        try {
            conn = mds.getConnection();
            String sql ="insert into transaction1(money) value(41)";
            pst=conn.prepareStatement(sql);
            if (pst.executeUpdate()!=0)
                System.out.println("succeed");
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            JDBCUtils.closePst(pst);
            mds.addBack(conn);
        }
    }

二 装饰者模式 extends Connection

在这里插入图片描述
代码:
1.DataSource

public class WraperDataSource implements DataSource {
    List<Connection> list = new ArrayList<Connection>();
    public WraperDataSource(){
        for (int i=0;i<10;i++){
            Connection connection = JDBCUtils.getConn();
            list.add(connection);
        }
    }
    public Connection getConnection() throws SQLException {
        if (list.size()==0){
            for (int i=0;i<5;i++){
                Connection connection = JDBCUtils.getConn();
                list.add(connection);
            }
        }
        Connection conn =list.remove(0);
        // 对象抛出的时候进行包装
        Connection connection =new ConnectionWrap(conn,list);
        return connection;
    }

2.一个类继承Connection 重写colse() preparedStatement()

public class ConnectionWrap implements Connection {
    Connection connection = null;
    List<Connection> list;
    public ConnectionWrap(Connection connection,List<Connection> list) {
        super();
        this.connection = connection;
        this.list= list;
    }

    public void close() throws SQLException {
        System.out.println("归还之前的List:"+list.size());
        list.add(connection);
        System.out.println("归还之后的List:"+list.size());
    }
    public PreparedStatement prepareStatement(String sql) throws SQLException {
        return connection.prepareStatement(sql);
    }

3.Test

 @Test
    public void polwrap() throws SQLException {
        WraperDataSource wraperDS = new WraperDataSource();
        Connection conn = null;
        PreparedStatement pst = null;
        try {
            conn = wraperDS.getConnection();
            String sql ="insert into transaction1(money) value(777)";
            pst=conn.prepareStatement(sql);
            pst.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            JDBCUtils.close(pst,conn);
        }
    }

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值