C3P0连接池
Demo-手动配置使用
public void demo(){ // 获得连接: Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; try{ // 创建连接池: ComboPooledDataSource dataSource = new ComboPooledDataSource(); // 设置连接池的参数: dataSource.setDriverClass("com.mysql.jdbc.Driver"); dataSource.setJdbcUrl("jdbc:mysql:///test"); dataSource.setUser("root"); dataSource.setPassword("hello"); dataSource.setMaxPoolSize(20); dataSource.setInitialPoolSize(3); // 获得连接: conn = dataSource.getConnection(); // 编写Sql: String sql = "select * from user"; // 预编译SQL: pstmt = conn.prepareStatement(sql); // 设置参数 // 执行SQL: rs = pstmt.executeQuery(); while(rs.next()){ System.out.println(rs.getInt("uid")+" "+rs.getString("username")+" "+rs.getString("password")+" "+rs.getString("name")); } }catch(Exception e){ e.printStackTrace(); }finally{ JDBCUtils.release(rs, pstmt, conn); } }
Demo-使用配置文件配置使用
主要步骤
- 创建
c3p0-config.xml
配置文件 - 定义一个工具类方便获得连接和释放资源
- 测试类中使用连接池
Demo
C3P0默认使用XML文件作为配置文件,默认在classpath路径下搜索c3p0-config.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:///test</property> <property name="user">root</property> <property name="password">hello</property> <property name="initialPoolSize">5</property> <property name="maxPoolSize">20</property> </default-config> </c3p0-config>
JDBCUnit.java
public class JDBCUtils { //创建连接池并设为静态常量 private static final ComboPooledDataSource dataSource = new ComboPooledDataSource(); // 用于获得连接 public static Connection getConnection() throws Exception{ Connection conn = dataSource.getConnection(); return conn; } // 用于释放资源 public static void release(Statement stmt,Connection conn){ if(stmt != null){ try { stmt.close(); } catch (SQLException e) { e.printStackTrace(); } stmt = null; } if(conn != null){ try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } conn = null; } } public static void release(ResultSet rs,Statement stmt,Connection conn){ if(rs!= null){ try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } rs = null; } if(stmt != null){ try { stmt.close(); } catch (SQLException e) { e.printStackTrace(); } stmt = null; } if(conn != null){ try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } conn = null; } } }
这样就可以在测试类中直接使用
public void demo(){ Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; try{ /*// 获得连接: ComboPooledDataSource dataSource = new ComboPooledDataSource();*/ // 获得连接: // conn = dataSource.getConnection(); conn = JDBCUtils.getConnection(); // 编写Sql: String sql = "select * from user"; // 预编译SQL: pstmt = conn.prepareStatement(sql); // 设置参数 // 执行SQL: rs = pstmt.executeQuery(); while(rs.next()){ System.out.println(rs.getInt("uid")+" "+rs.getString("username")+" "+rs.getString("password")+" "+rs.getString("name")); } }catch(Exception e){ e.printStackTrace(); }finally{ JDBCUtils2.release(rs, pstmt, conn); } }