池:内存空间
* 连接池:存放连接资源的一个容器
*
* 为什么要用连接池:
* 每次访问数据库都要创建一个新的连接,频繁的创建和关闭连接会耗费时间而且耗费资源,因此会导致程序执行的效率低下。
导入c3p0连接池的使用
- 1.导入c3P0的开发包(jar包)
- 2.在程序中创建一个连接池对象(容器:里面会存放一批连接)
- 3.设置连接数据库的基本信息(驱动类的全路径,连接的库的URL地址,连接的库的用户名和密码)
- 方式一:直接将连接参数写死在程序中,如果将来有变化,就需要改程序,会带来很多不必要的麻烦
- 方式二:将连接数据库的基本信息配置在c3p0.properties 文件,文件放在src根目录下
- 方式三:将连接数据库的基本信息配置在c3p0-config.xml文件中,文件放在src根目录下
- 方式二和方式三中的文件名都是固定的,不能改变,因为c3p0程序会自动读取这些问题
- 4.从连接池中获取一个连接对象进行使用
- 5.将连接还回到连接池中
第一步:
在官网下载c3p0-0.9.1.2.jar包,复制到lib(右键新建folder,命名为lib)库中,右键buildpath->add to the path;
之后在你的库中会出现一个奶瓶图案的同名jar包
第二部创建链接:代码如下:
public class TestC3p0 {
static ComboPooledDataSource pool=new ComboPooledDataSource();
// //设置连接数据库的基本信息(方式一:不推荐使用)
// static {
// try {
// pool.setDriverClass("com.mysql.jdbc.Driver");//设置驱动类
// pool.setJdbcUrl("jdbc:mysql://localhost:3306/jt_db?characterEncoding=utf-8");
// pool.setUser("root");
// pool.setPassword("root");
// } catch (PropertyVetoException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
// }
@Test
public void testFindAll() throws SQLException {
//
//注册驱动,并获取连接(创建一个新对象
//Connection conn=jdbcUtil.getConn();
//改为从连接池中获取一条连接
Connection conn=pool.getConnection();
//获取传输器
String sql="select * from user";
PreparedStatement ps=conn.prepareStatement(sql);
//执行sql语句,返回执行接货
ResultSet rs=ps.executeQuery();
//输出结果
System.out.println("id\t"+"username\t"+"password\t");
while(rs.next()) {
//System.out.println(rs.getInt("id")+"\t"+rs.getString("username")+"\t\t"+rs.getString("password"));
System.out.println(rs.getInt(1)+"\t"+rs.getString(2)+"\t\t"+rs.getString(3));
}
//释放资源
rs.close();
ps.close();
conn.close();
/*如果当前这个连接对象,使我们自己创建的一个连接对象,调用conn.close方法默认就是将连接关闭(也就是释放掉)
* 如果当前这个连接对象是从连接池中获取过来的,在连接池返回这个连接对象时看,会改造连接对象的功能(方法)
* 将conn的close方法还链接到连接池中,而不是将连接关闭。
*
*/
}
}
我们上面看到的是创建连接池的第一种方法,
第二种方法为在src里新建一个file文件,重命名为c3p0.prperties
这样,直接就可以运行了,因为程序会自动调用它。