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); } }