连接池的意义
- 作用:连接池是将已经创建好的连接保存在池中,当有请求来时,直接使用已经创建好的连接对数据库进行访问。这样省略了创建连接和销毁连接的过程。这样性能上得到了提高。
- 连接池放了N个Connection对象,本质上放在内存当中,在内存中划出一块缓存对象,应用程序每次从池里获得Connection对象,而不是直接从数据里获得,这样不占用服务器的内存资源。
两种优秀的连接池技术
- 都要实现接口DataSource接口
- C3P0
- DPCP
jar包
DPCP
- commons-dbcp-1.4.jar
- commons-pool-1.5.6.jar
C3P0
- c3p0-0.9.1.2.jar
DPCP
//硬编码的方式实现
@Test
public void testDPCP() throws SQLException {
//获取DPCP核心类
BasicDataSource dataSource = new BasicDataSource();
//设置连接池
dataSource.setInitialSize(3); //初始化连接数
dataSource.setMaxActive(6); //最大连接数
dataSource.setMaxIdle(300); //最大空闲时间
//设置连接的参数 连接字段,驱动,连接用户,密码
String basename="root";
String password ="root";
String url = "jdbc:mysql:///JavaWeb?useUnicode=true&characterEncoding=utf8";
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl(url);
dataSource.setUsername(basename);
dataSource.setPassword(password);
//获取连接
Connection conn = dataSource.getConnection();
conn.prepareStatement("delete from admin where id = 3").executeUpdate();
//关闭流
conn.close();
}
//加载配置文件创建
@Test
public void testDPCP2() throws Exception {
Properties prop = new Properties();
//加载文件输入流
InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("db.properties");
//加载配置文件
prop.load(inputStream);
//创建DataSource
DataSource dataSource = BasicDataSourceFactory.createDataSource(prop);
//创建连接
Connection conn = dataSource.getConnection();
conn.prepareStatement("update admin set userName='tom' where id = 6").executeUpdate();
//关闭流
conn.close();
}
C3P0
//加载配置文件
@Test
public void C3P0Xml() throws SQLException {
//加载核心工具类
ComboPooledDataSource dataSource = new ComboPooledDataSource("myApp");
//创建连接
Connection conn = dataSource.getConnection();
PreparedStatement pstmt=null;
for(int i=1;i<11;i++){
String sql = "insert into admin(userName,pwd) values (?,?)";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1,"jack"+i);
pstmt.setString(2,"jack006");
pstmt.executeUpdate();
}
//关闭流
pstmt.close();
conn.close();
}
c3p0的配置文件
网友评论