一:连接池
(一)定义:将连接放在容器中,目的是共享连接,减少连接创建和复用的次数,实现连接的共享(连接资源时有限的)
(二)池:指的是在内存中开辟一个空间或者容器,然后在其中存放资源(比如数组和集合)
(三)采用连接池的原因:为了避免采用传统方式的新建连接和关闭连接,实现连接的复用,实现连接的共享,提高连接的利用率,避免了新建和关闭连接
备注:由于连接资源是有限的,所以在创建连接之后,要即时关闭连接
二C3P0连接池代码:
@Test
public void testFindAll(){
Connection conn=null;
PreparedStatement ps=null;
ResultSet rs=null;
try{
//1.注册数据库驱动
Class.forName("com.mysql.jdbc.Driver");
//2.获取连接
conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/jt_db");
//3.获取sql骨架并获取传输器
String sql="select * from account";
ps=conn.prepareStatement(sql);
rs=ps.executeQuery();
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,ps,stat);
}
}
加上C3P0连接池之后:
@Test
public void testFindAll(){
Connection conn=null;
PreparedStatement ps=null;
ResultSet rs=null;
//1.创建一个连接池对象:新的空连接池
ComboPooledDataSource pool=new ComboPooledDataSource();
try{
//2.设置连接数据库的基本信息,告诉是在哪一个位置的哪一个库
pool.setDriverClass("com.mysql.jdbc.Driver");
pool.setJdbcUrl("jdbc:mysql://localhost:3306/jt_db?characterEncoding=utf-8");
pool.setUser("rooot");
pool.setPassword("root");
//3.从连接池中获取连接对象
conn=pool.getConnection();
String sql="select * from account";
ps=conn.prepareStatement(sql);
rs=ps.executeQuery();
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,ps,stat);
//这里也用close()但是这里的close()方法的作用是还回连接
}
}
三:注意事项:
1.xml文件的书写要求很严:
2.连接池又称为数据源
3这里既可以使用PreparedStatement又可以使用Statement,这是由于这里没哟参数
4.这里方式二和方式三的文件呢的位置和名称是固定化的,所以这里不能够改变位置和名称