数据库连接池
池是一个容器,在内存中就是一片空间,用于存储程序中的数据
连接池:就是讲连接对象存放在一个容器中,当需要连接时,就直接从连接池中获取一个连接进行使用,用完连接后再将连接换回连接池中
传统方式(不使用连接池)每次创建一个连接进行使用,用完连接后就将连接直接关闭,对于数据库来说,频繁的创建连接和关闭连接会非常的消耗资源,而且浪费时间,会导致程序执行效率降低,连接也无法复用
使用连接池操作数据库,可以创建一个池子,在程序一启动时,就初始化一批连接放在连接池中,当用户需要连接时,就直接从池子中拿一个连接进行使用,当连接用完后,也不要将连接关闭,而是将连接还回池中,下一个用户需要连接时,也是如此。这样一来,用来用去都是池中这一批连接,可以减少创建和关闭的次数
如何使用c3p0连接池
其他连接池:dbcp,c3p0,druid
1.导入开发包
2.创建数据库连接池对象
3.设置数据库连接的基本信息
4…基于一个连接池获取一个连接对象
5.强连接再换回连接池中
代码如下:
package com.tedu.c3p0;
/**
* 测试c3p0连接池的使用
* @author Administrator
*
*/
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import org.junit.Test;
import com.mchange.v2.c3p0.ComboPooledDataSource;
import com.tedu.Util.jdbcUtil;
public class TeatC3P0 {
@Test
public void testFindAll() {
Connection conn=null;
Statement stat=null;
ResultSet rs=null;
//创建一个连接池对象
ComboPooledDataSource pool=new ComboPooledDataSource();
try {
//设置连接数据库的基本信息
pool.setDriverClass("com.mysql.jdbc.Driver");
pool.setJdbcUrl("jdbc:mysql://localhost:3306/jt_db?characterEncoding=utf-8");
pool.setUser("root");
pool.setPassword("root");
//获取一个连接对象
conn=pool.getConnection();
stat=conn.createStatement();
String sql="select*from account ";
rs=stat.executeQuery(sql);
while(rs.next()) {
int id=rs.getInt("id");
String name=rs.getString("name");
double money=rs.getDouble("money");
//处理结果
System.out.println(id+":"+name+":"+money);
}
} catch (Exception e) {
e.printStackTrace();
}finally {
//将连接还回连接池中
jdbcUtil.close(conn, stat, rs);
}
}
}