DBCP(DataBase connection pool),数据库连接池。是 apache 上的一个 java 连接池项目,也是 tomcat 使用的连接池组件。单独使用dbcp需要2个包:commons-dbcp.jar,commons-pool.jar。
由于建立数据库连接是一个非常耗时耗资源的行为,所以通过连接池预先同数据库建立一些连接,放在内存中,应用程序需要建立数据库连接时直接到连接池中申请一个就行,用完后再放回去。
commons-dbcp.jar:连接池的实现
commons-pool.jar:连接池实现的依赖库
首先测试硬编码的方式进行测试:
import org.apache.commons.dbcp.BasicDataSource;
import org.junit.Test;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class DBCP1 {
//硬编码方式,就是在代码中添加配置
@Test
public void t() throws SQLException {
BasicDataSource bds = new BasicDataSource();
bds.setDriverClassName("com.mysql.jdbc.Driver");
bds.setUrl("jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf-8");
bds.setUsername("root");
bds.setPassword("1234");
Connection conn = bds.getConnection();
PreparedStatement ps = conn.prepareStatement("select * from students");
ResultSet rs = ps.executeQuery();
while(rs.next()){
String sname = rs.getString("sname");
System.out.println(sname);
}
conn.close();
}
}
接着使用软编码的方式:
先写一个配置文件:info.properties
#\u8FDE\u63A5\u8BBE\u7F6E
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf-8
username=root
password=1234
#<!-- 初始化连接 -->
initialSize=10
#最大连接数量
maxActive=50
#<!-- 最大空闲连接 -->
maxIdle=20
#<!-- 最小空闲连接 -->
minIdle=5
#<!-- 超时等待时间以毫秒为单位 6000毫秒/1000等于60秒 -->
maxWait=60000
代码展示:
import org.apache.commons.dbcp.BasicDataSourceFactory;
import org.junit.Test;
import javax.sql.DataSource;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Properties;
public class DBCP2 {
@Test
public void t() throws Exception {
BasicDataSourceFactory bdsf = new BasicDataSourceFactory();
Properties p = new Properties();
InputStream is = BasicDataSourceFactory.class.getResourceAsStream("/info.properties");
p.load(is);
DataSource ds = bdsf.createDataSource(p);
Connection conn = ds.getConnection();
PreparedStatement ps = conn.prepareStatement("select * from students");
ResultSet rs = ps.executeQuery();
while(rs.next()){
String sname = rs.getString("sname");
System.out.println(sname);
}
conn.close(); //回收对象
}
}