【归纳总结】数据库之连接池

我们用 JDBC 操作数据库的时候,每次操作完都会将连接关闭。数据库连接是极其宝贵的资源,频繁的创建和销毁会极大地降低服务器的性能。因此,我们可以利用池化技术,重复利用数据库资源,避免没必要的开销。

用口语来说,相当于我们创建了一个池子,这个池子里面放的都是一些JDBC的连接,也就是Connection对象,每当我们需要时,我们去从连接池里面获取连接,使用完了连接,放回连接池,做到连接的反复使用

手写一个数据库连接池

思路:

  1. 要实现DataSource接口(SUN公司就制定的连接池的标准)
  2. 要有一个getConnection()方法用来获取连接池中的connection对象
  3. 连接池中的connection对象有进有出,所以把他们放入队列使用起来是比较方便的
  4. 当connection对象调用close()方法的时候不应该关闭连接池,而是要把连接放回连接池中,所以我们要自建一个连接对象(通过实现connection接口)

伪代码如下:
重写close():

public class MyWrapperConnection implements Connection{
   
    // 维护一个Connection对象,重写除close()以外的方法我们直接用Connection对象的方法
    private Connection connection;
    // 维护一个队列用来
    private LinkedList<Connection> queue;

    // 无参构造
    public MyWrapperConnection() {
   
    }

    // 有参构造
    public MyWrapperConnection(Connection connection, LinkedList<Connection> linkedList) {
   
        this.connection = connection;
        this.linkedList = linkedList;
    }

    //重写close()方法
    @Override
    public void close() throws SQLException {
   
        // 用完放回队列
        queue.offer(this);
    }

构建连接池:

public class MyConnectionPool implements DataSource {
   

    // 得用一个数据结构去存放连接
    static LinkedList<Connection> queue;

    static {
   

        init(10);

    }
    // 往连接池里面放连接的方法
    private static void init(int num) {
   
        if (connectionPool == null) {
   
            connectionPool = new LinkedList<>();
        }
        for (int i = 0; i < num; i++) {
   
            // 添加一个连接
            Connection connection = JDBCUtils.getConnection();
            MyWrapperConnection myWrapperConnection = new MyWrapperConnection(connection, queue);
            connectionPool.addFirst(myWrapperConnection)
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值