JDBC连接池

本文介绍了JDBC中使用连接池的原因,通过创建一个简单的MyDataSource类来管理连接,包括初始化连接、从连接池获取和归还连接的过程。测试部分展示了连接池在实际应用中的工作方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 为什么要使⽤连接池
Connection 对象在 JDBC 使⽤的时候就会去创建⼀个对象,使
⽤结束以后就会将这个对象给销毁了 (close) 。每次创建和销毁
对象都是耗时操作,需要使⽤连接池对其进⾏优化。
程序初始化的时候,初始化多个连接,将多个连接放⼊到池
( 集合 ) 中。每次获取的时候,都可以直接从连接池中进⾏获
取。使⽤结束以后,将连接归还到池中。
2 连接池原理【重点】
代码
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.LinkedList;

public class MyDataSource {
    private String url = "jdbc:mysql://localhost:3306/2207b";
    private String username = "root";
    private String password = "123456";

    //new 一个对象 连接池
    private LinkedList<Connection> connections = new LinkedList<>();

    public MyDataSource() {
        //循环创建5个连接
        for (int i = 1; i <= 5; i++) {
            try {
                Connection connection = DriverManager.getConnection(url, username, password);
                connections.add(connection);
            } catch (SQLException e) {
                throw new RuntimeException(e);
            }
        }
    }

    public Connection getConnection() {
        Connection connection = null;
        //判断 集合里的内容是否大于零
        if (connections.size() > 0) {
            System.out.println("连接池获取");
            //进行删除第一个
            connection = connections.removeFirst();
        } else {
            System.out.println("连接池没有连接,重新创建");
            try {
                connection = DriverManager.getConnection(url, username, password);
            } catch (SQLException e) {
                throw new RuntimeException(e);
            }
        }
        return connection;
    }

    //归还连接 将取走的连接添加到尾部
    public void addBack(Connection connection){
        connections.addLast(connection);
    }
}
测试
import org.junit.Test;

import java.sql.Connection;

public class textDataSource {
    @Test
    public void ce() {
        //创建对象 打印进行测试
        MyDataSource myDataSource = new MyDataSource();
        Connection c1 = myDataSource.getConnection();
        Connection c2 = myDataSource.getConnection();
        Connection c3 = myDataSource.getConnection();
        Connection c4 = myDataSource.getConnection();
        Connection c5 = myDataSource.getConnection();
        System.out.println(c1);
        System.out.println(c2);
        System.out.println(c3);
        System.out.println(c4);
        System.out.println(c5);

        myDataSource.addBack(c4); //归还的连接
        myDataSource.addBack(c5); //归还的连接

        Connection c6 = myDataSource.getConnection();
        Connection c7 = myDataSource.getConnection();
        System.out.println(c6);
        System.out.println(c7);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值