1. 数据库连接池

1.1 概念

数据库连接池就是一个存放数据库连接的容器,当系统初始化好后,容器被创建,容器中会申请一些连接对象。当用户来访问数据库时,从容器中获取连接对象,用户访问完之后就会将连接对象归还给容器,而不会自行释放连接所拥有的系统资源。

使用数据库连接池的好处是节约资源,以及使得用户的访问更加高效。

1.2 实现

创建数据库连接池需要实现Java中的标准接口javax.sql.DataSource,方法为:

  • getConnection():获取连接
  • Connection.close():归还连接,如果连接对象是从连接池中获取的,那么调用Connection.close()不会再关闭连接,而是执行归还连接操作

2. 连接池实现

虽然可以通过实现DataSource接口来自定义实现数据库连接池,但更多的情况是直接使用开源的连接池。常用的第三方数据库连接池有DBCP、C3P0、DbUtils和Druid等。

2.1 DBCP

2.2 C3P0

  1. package JDBC.ConnectionPools;
  2. import com.mchange.v2.c3p0.ComboPooledDataSource;
  3. import java.sql.Connection;
  4. public class C3P0 {
  5. public static void main(String[] args) throws Exception {
  6. ComboPooledDataSource dataSource = new ComboPooledDataSource();
  7. dataSource.setDriverClass("com.mysql.cj.jdbc.Driver");
  8. dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/sql_store" +
  9. "?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT&allowPublicKeyRetrieval=true");
  10. dataSource.setUser("root");
  11. dataSource.setPassword("120809");
  12. final Connection connection = dataSource.getConnection();
  13. System.out.println(connection);
  14. }
  15. }

2.3 DbUtils

2.4 Druid