JDBC使用 C3P0连接池 demo

孤街浪徒 提交于 2019-12-03 21:24:01

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-使用配置文件配置使用

主要步骤

  1. 创建c3p0-config.xml配置文件
  2. 定义一个工具类方便获得连接和释放资源
  3. 测试类中使用连接池

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);
        }
    }
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!