首页 > 代码库 > JDBC数据库连接池技术

JDBC数据库连接池技术

在JDBC中,获得连接或释放资源是非常消耗系统资源的两个过程,为了解决此类性能问题,通常采用连接池技术,来共享连接。这样我们就不需要每次都创建连接、释放连接了,这些操作都交给了连接池。

用池的概念来管理Connection,这样可以重复使用Connection。有了连接池以后就不用自己亲自创建连接而是通过连接池来获得Connection对象。当使用完Connection之后,调用Connection的close()方法不是真的将连接关闭,而是把Connection归还给连接池。连接池就可以继续保留这个Connection给其他用户使用了。

Java为了数据库连接池提供了公共的接口:javax.sql.DataSource,各个厂商需要让自己的连接池来实现这个接口,这样应用程序可以方便的切换不同厂商的连接池。有三个常用的连接池:DBCP、C3P0和druid

DBCP连接池

DBCP是一个开源的连接池,是Apache Common成员之一,在企业开发中也比较常见,tomcat内置的连接池。

在使用DBCP之前,要引入2个包:commons-dbcp.jar和commons-pool.jar。

技术分享

  1 package com.dbcp.demo;
  2 import java.sql.Connection;
  3 import java.sql.PreparedStatement;
  4 import java.sql.SQLException;
  5 import javax.sql.DataSource;
  6 import org.apache.commons.dbcp.BasicDataSource;
  7 
  8 public class DemoDBCP {
  9     // 连接数据库的参数
 10     public static final String DRIVER = "com.mysql.jdbc.Driver";
 11     public static final String URL = "jdbc:mysql://localhost:3306/mybatis";
 12     public static final String USERNAME = "root";
 13     public static final String PASSWORD = "123456";
 14 
 15     // 创建连接池
 16     public static BasicDataSource dataSource = new BasicDataSource();
 17 
 18     // 静态代码块
 19     static {
 20         // 对连接池对象进行基本的配置
 21         dataSource.setDriverClassName(DRIVER);     // 待连接的数据库的驱动
 22         dataSource.setUrl(URL);                 // 指定要连接的数据库的地址
 23         dataSource.setUsername(USERNAME);         // 指定要连接的用户名
 24         dataSource.setPassword(PASSWORD);          // 指定要连接数据库的密码
 25 
 26         // 这里应该还有设置连接数的语句
 27     }
 28 
 29     // 返回连接池对象
 30     public static DataSource getDataSource() {
 31         return dataSource;
 32     }
 33 
 34     // 测试连接池
 35     public static void main(String[] args) throws SQLException {
 36         // 获得连接池
 37         DataSource dataSource = DemoDBCP.getDataSource();
 38         // 从连接池中获得连接
 39         Connection conn = dataSource.getConnection();
 40         // 准备sql语句
 41         String sql = "insert into person (LastName, FirstName, Address, Age) values" +
 42                 " (?, ? ,?, ?)";
 43         // 获得PresparedStatement对象
 44         PreparedStatement pstmt = conn.prepareStatement(sql);
 45         // 设置参数
 46         pstmt.setString(1, "");
 47         pstmt.setString(2, "");
 48         pstmt.setString(3, "埃塞俄比亚");
 49         pstmt.setInt(4, 24);
 50         // 执行CRUD操作
 51         pstmt.execute();
 52         // 关闭连接
 53         conn.close();
 54     }
 55 }

DBCP常见的配置选项

必须的配置项
driverclassName 数据库驱动名称
url 数据库的地址
username 用户名
password 密码
基本项
maxActive 最大连接数
initialSize 连接池中初始化多少个Connection连接对象
扩展项
maxWait 超时等待时间以毫秒为单位

JDBC数据库连接池技术