• <十四>JDBC_c3p0数据库连接池


    配置文件:c3p0-config.xml

    <!-- Hibernate官方推荐使用的数据库连接池即c3p0;dbcp是Tomcat在数据源中使用 -->
    <c3p0-config>
        <default-config>
            <!-- 指定连接数据源的基本属性,注意属性名不能随便写 -->
            <property name="user">root</property>
            <property name="password">kk</property>
            <property name="driverClass">com.mysql.jdbc.Driver</property>
            <property name="jdbcUrl">jdbc:mysql:///test</property>
           
            <!-- 若数据库中连接数不足时,一次向数据库中服务器申请多少个连接 -->
            <property name="acquireIncrement">8</property>
            <!-- 初始化数据库连接池时的连接数量 -->
            <property name="initialPoolSize">9</property>
            <!-- 数据库连接池中的最小数据库连接数 -->
            <property name="minPoolSize">5</property>
            <!-- 数据库连接池中的最大数据库连接数 -->
            <property name="maxPoolSize">10</property>
           
            <!-- c3p0数据库连接池可以维护的Statement的个数 -->
            <property name="maxStatements">0</property>
            <!-- 每个链接同时可以使用的Statement对象的个数  -->
            <property name="maxStatementsPerConnection">5</property>
        </default-config>
    </c3p0-config>

    测试文件1:

     /*
      * 1、创建c3p0-config.xml文件
      * 2、创建ComboPooledDataSource实例
      * 3、从DataSource实例获取数据库连接
      * */
     @Test
     public void testC3P0Config() throws SQLException{
      
        DataSource ds=new ComboPooledDataSource();
        System.out.println(ds.getConnection());
        ComboPooledDataSource cpds=(ComboPooledDataSource) ds;
        System.out.println(cpds.getAcquireIncrement());
     }

    测试文件2:

    @Test
     public void testC3P0() throws PropertyVetoException, SQLException {
      
        ComboPooledDataSource cpds=new ComboPooledDataSource();
        cpds.setDriverClass("com.mysql.jdbc.Driver");
        cpds.setJdbcUrl("jdbc:mysql:///test");
        cpds.setUser("root");
        cpds.setPassword("kk");
      
        System.out.println(cpds.getConnection());
     }

    重构DAO文件:DAO.java

    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    import javax.sql.DataSource;

    import com.mchange.v2.c3p0.ComboPooledDataSource;

    /*
     * JDBC工具类
     * */
    public class JDBCTools {

       // 提交事务
       public static void commit(Connection con) {

          if (con != null) {
             try {
                con.commit();
             } catch (SQLException e) {
                e.printStackTrace();
             }
          }
       }

       //回滚事务
       public static void rollback(Connection con) {

          if (con != null) {
             try {
                con.rollback();
             } catch (SQLException e) {
                e.printStackTrace();
             }
          }
       }
     
       //开始事务
       public static void beginTx(Connection con) {

          if (con != null) {
             try {
                con.setAutoCommit(false);
             } catch (SQLException e) {
                e.printStackTrace();
           }
        }
     }

     /*
      * 执行SQL的方法 insert,update,delete
      */
     public static void update(String sql, Object... args) {

      Connection conn = null;
      PreparedStatement ps = null;

      try {
       /*
        * 1、获取Connection连接 2、获取Statement 3、SQL语句 4、关闭数据库连接
        *
        */
       conn = getConnection();
       ps = conn.prepareStatement(sql);

       for (int i = 0; i < args.length; i++) {
        ps.setObject(i + 1, args[i]);
       }

       ps.executeUpdate();

      } catch (Exception e) {
       e.printStackTrace();
      } finally {
       release(null, ps, conn);
      }
     }

     private static DataSource ds=null;
     //数据库连接池应该被初始化一次,比较耗时
     static{
      ds=new ComboPooledDataSource();
     }
     
     public static Connection getConnection() throws Exception {

      return ds.getConnection();
     }

     public static void release(ResultSet rs, Statement st, Connection conn) {

      if (rs != null) {
       try {
        rs.close();
       } catch (SQLException e) {
        e.printStackTrace();
       }
      }

      if (st != null) {
       try {
        st.close();
       } catch (SQLException e) {
        e.printStackTrace();
       }
      }

      if (conn != null) {
       try {
        /*
         * 数据库连接池的Connection对象进行close时并不是真的进行关闭,
         * 而是将该数据库连接归还到数据库连接池
         * */
        conn.close();
       } catch (SQLException e) {
        e.printStackTrace();
       }
      }
     }
    }

  • 相关阅读:
    WorkFlow入门Step.2—Building a Simple WorkFlowForWF4.0
    AgileEAS.NET敏捷开发平台升级版(丑小鸭的蜕变)[已修复下载链接]
    AgileEAS.NET平台开发实例药店系统视频教程系列索引
    AgileEAS.NET敏捷开发平台及案例下载(持续更新)索引
    WorkFlow入门Step.3—Adding Procedural ElementsForWF4.0
    AgileEAS.NET敏捷开发平台案例药店系统项目综述
    AgileEAS.NET平台开发实例智能升级及服务器部署
    WorkFlow入门Step.4—Adding Procedural ElementsForWF4.0(续)
    AgileEAS.NET平台开发实例药店系统资源文件的替换[大家关心的问题]
    停靠在八楼的2路汽车/ 刀郎:2002年第一场雪
  • 原文地址:https://www.cnblogs.com/iamkk/p/6093808.html
Copyright © 2020-2023  润新知