天天看点

c3p0连接池配置_(五)JDBC连接池

c3p0连接池配置_(五)JDBC连接池
一、介绍

1、连接池是创建和管理一个连接的缓冲池的技术,这些连接准备好被任何需要它们的线程使用

2、作用

连接对象创建和销毁是需要耗费时间的,在服务器初始化的时候就初始化一些连接。把这些连接放入到内存中,使用的时候可以从内存中获取,使用完成之后将连接放入连接池中。从内存中获取和归还的效率要远远高于创建和销毁的效率,提升性能。

二、常见的开源连接池
  • druid

     Druid阿里旗下开源连接池产品

  • C3P0

    C3P0是一个开放源代码的JDBC连接池,Hibernate的发行包中默认使用此连接池。据说性能最好。

三、DBUtils

Commons DbUtils是Apache组织提供的一个对JDBC进行简单封装的开源工具类库,使用它能够简化JDBC应用程序的开发,同时也不会影响程序的性能

四、druid的使用

1、添加maven

<dependency>    <groupId>com.alibabagroupId>    <artifactId>druidartifactId>    <version>1.1.23version>dependency>
           

2、db.properties放在src目录下

#key=valuedriverClassName=com.mysql.jdbc.Driverurl=jdbc:mysql://localhost:3306/mydb?rewriteBatchedStatements=true#url=jdbc:mysql://localhost:3306/mysqldbusername=rootpassword=rootinitialSize=10minIdle=5maxActive=20maxWait=5000
           

3、代码

@Test    /**     * Druid的使用:     * * 配置方式设置参数     * Druid配置方式可以使用属性文件配置的。     * * 文件名称没有规定但是属性文件中的key要一定的。     */    public void druid(){        Connection conn = null;        PreparedStatement pstmt = null;        ResultSet rs = null;        try{            // 使用连接池:            // 从属性文件中获取:            Properties properties = new Properties();            properties.load(new FileInputStream("src/druid.properties"));            DataSource dataSource = DruidDataSourceFactory.createDataSource(properties);            // 获得连接:            conn = dataSource.getConnection();            // 编写SQL:            String sql = "select * from account";            // 预编译SQL:            pstmt = conn.prepareStatement(sql);            // 设置参数:            // 执行SQL:            rs = pstmt.executeQuery();            while(rs.next()){                System.out.println(rs.getInt("id")+" "+rs.getString("name")+" "+rs.getDouble("money"));            }        }catch(Exception e){            e.printStackTrace();        }finally{            JDBCUtil.release(rs, pstmt, conn);        }    }
           

五、c3P0

1、maven

<dependency>    <groupId>c3p0groupId>    <artifactId>c3p0artifactId>    <version>0.9.1.2version>dependency>
           

2、c3p0-config.xml配置文件,eclipse放在src目录下,idea放在resource目录下

<?xml version="1.0" encoding="UTF-8"?>            ="driverClass">com.mysql.jdbc.Driver        ="jdbcUrl">jdbc:mysql:///mydb        ="user">root        ="password">root        ="initialPoolSize">5        ="minPoolSize">5        ="maxPoolSize">20    
           

3、代码

@Test/** * 采用配置文件的方式: */public void c3p0(){    Connection conn = null;    PreparedStatement pstmt = null;    ResultSet rs = null;    try{        // 获得连接:从连接池中获取:        // 创建连接池://创建连接池默认去类路径下查找c3p0-config.xml        ComboPooledDataSource dataSource = new ComboPooledDataSource();        // 从连接池中获得连接:        conn = dataSource.getConnection();        // 编写SQL:        String sql = "select * from account";        // 预编译SQL:        pstmt = conn.prepareStatement(sql);        // 执行SQL:        rs = pstmt.executeQuery();        while(rs.next()){            System.out.println(rs.getInt("id")+" "+rs.getString("name")+" "+rs.getDouble("money"));        }    }catch(Exception e){        e.printStackTrace();    }finally{        JDBCUtil.release(rs, pstmt, conn);    }}
           

六、c3p0连接池工具类

1、代码

/** * JDBC的工具类 * @author jt * */public class JDBCUtils2 {   // 创建一个连接池:但是这个连接池只需要创建一次即可。   private static final ComboPooledDataSource dataSource = new ComboPooledDataSource();   /**    * 获得连接的方法    * @throws SQLException    */   public static Connection getConnection() throws SQLException{      return dataSource.getConnection();   }   /**    * 获得连接池:    */   public static DataSource getDataSource(){      return dataSource;   }   /**    * 释放资源的方法    */   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;      }   }}
           

继续阅读