现在很多WEB服务器(Weblogic, WebSphere, Tomcat)都提供了DataSoruce的实现,即连接池的实现。通常我们把DataSource的实现,按其英文含义称之为数据源,数据源中都包含了数据库连接池的实现。 也有一些开源组织提供了数据源的独立实现: ①DBCP 数据库连接池
现在很多WEB服务器(Weblogic, WebSphere, Tomcat)都提供了DataSoruce的实现,即连接池的实现。通常我们把DataSource的实现,按其英文含义称之为数据源,数据源中都包含了数据库连接池的实现。①DBCP 数据库连接池
②C3P0 数据库连接池(使用最简单方便)
③Apache Tomcat内置的连接池(apache dbcp)
实际应用时不需要编写连接数据库代码,直接从数据源获得数据库的连接。程序员编程时也应尽量使用这些数据源的实现,以提升程序的数据库访问性能。
使用时,需要新建java工程,在工程中建立“lib”目录,其中添加c3p0-0.9.1.2.jar和mysql-connector-java-5.0.8-bin.jar(mysql驱动)包,并add to build path。
第一种方法:不使用xml配置文件。
/** * 演示c3p0的使用方法 * @project_name Day11 * @class_name C3P0Demo * @author Dovinya * @data 2014-8-27 下午07:57:42 * @version 1 * @notes */ public class C3P0Demo { @Test public void operateDatabase() { Connection conn =null; PreparedStatement ps = null; ResultSet rs = null; try { // Class.forName("com.mysql.jdbc.Driver"); // conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/day11", "root", "123"); // ps = conn.prepareStatement("select * from account"); ComboPooledDataSource dataSource = new ComboPooledDataSource(); dataSource.setDriverClass("com.mysql.jdbc.Driver"); dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/day11"); dataSource.setUser("root"); dataSource.setPassword("123"); conn = dataSource.getConnection(); ps = conn.prepareStatement("select * from account"); rs = ps.executeQuery(); while(rs.next()){ String name = rs.getString("name"); System.out.println(name); } } catch (Exception e) { e.printStackTrace(); }finally{ if(rs!=null){ try { rs.close(); } catch (SQLException e) { e.printStackTrace(); }finally{ rs=null; } } if(ps!=null){ try { ps.close(); } catch (SQLException e) { e.printStackTrace(); }finally{ ps=null; } } if(conn!=null){ try { conn.close(); } catch (SQLException e) { e.printStackTrace(); }finally{ conn=null; } } } } }
先新建xml文件,命名为c3p0-config.xml,在其中添加如下代码:
<?xml version="1.0" encoding="UTF-8"?> <c3p0-config> <default-config> <property name="driverClass">com.mysql.jdbc.Driver</property> <property name="jdbcUrl">jdbc:mysql:///day11</property> <property name="user">root</property> <property name="password">123</property> <property name="acquireIncrement">3</property> <!--当连接池中已经没有连接时,连接池自动获取连接时一次获取的连接个数--> <property name="initialPoolSize">10</property> <!--初始化连接池时,获取的连接个数--> <property name="minPoolSize">2</property> <!--连接池应该保有的最小连接的数量--> <property name="maxPoolSize">10</property> <!--连接池中可以保有的最大连接数量--> </default-config> </c3p0-config>
import com.mchange.v2.c3p0.ComboPooledDataSource; /** * 演示c3p0的使用方法 * @project_name Day11 * @class_name C3P0Demo * @author Dovinya * @data 2014-8-27 下午07:57:42 * @version 1 * @notes */ public class C3P0Demo { @Test public void operateDatabase() { Connection conn =null; PreparedStatement ps = null; ResultSet rs = null; try { ComboPooledDataSource dataSource = new ComboPooledDataSource(); conn = dataSource.getConnection(); ps = conn.prepareStatement("select * from account"); rs = ps.executeQuery(); while(rs.next()){ String name = rs.getString("name"); System.out.println(name); } } catch (Exception e) { e.printStackTrace(); }finally{ if(rs!=null){ try { rs.close(); } catch (SQLException e) { e.printStackTrace(); }finally{ rs=null; } } if(ps!=null){ try { ps.close(); } catch (SQLException e) { e.printStackTrace(); }finally{ ps=null; } } if(conn!=null){ try { conn.close(); } catch (SQLException e) { e.printStackTrace(); }finally{ conn=null; } } } } }