c3p0的使用方法及注意事项

时间:2022-09-19 23:22:53

今天学习数据库连接池的时候发现C3P0需要导入需要导入如下两个jar包,

c3p0的使用方法及注意事项c3p0的使用方法及注意事项

否则会报错。这里附上jar包的下载链接。c3p0下载链接

顺便了解下使用c3p0连接池的方法。

首先我们需要知道为什么要使用连接池:因为jdbc没有保持连接的能力,一旦超过一定时间没有使用(大约几百毫秒),连接就会被自动释放掉,每次新建连接都需要140毫秒左右的时间而C3P0连接池会池化连接,随时取用,平均每次取用只需要10-20毫秒,所以如果是很多客户端并发随机访问数据库的话,使用连接池的效率会高。接下来我们看使用c3p0需要做那些准备:首先需要导入相对应的jar包:也就是上图的两个jar包,然后就是链接数据库的配置文件:c3p0-config.xml(必须叫这个名字),然后必须放在工程目录的src下面c3p0-config.xml配置文件如下如下:

c3p0-config.xml:

<?xmlversion="1.0" encoding="UTF-8"?>
<c3p0-config> 
    <named-configname="mysql"> 
        <!-- 数据库连接需要的4个字段 -->
        <propertyname="driverClass">com.mysql.jdbc.Driver</property>     
        <propertyname="jdbcUrl">jdbc:mysql://localhost:3306/login?useUnicode=true&characterEncoding=utf8</property>      
        <propertyname="user">root</property>   
        <propertyname="password"></property> 
        <!-- 数据库连接池的一些配置 -->
        <propertyname="acquireIncrement">3</property>
        <propertyname="initialPoolSize">10</property> 
        <propertyname="maxIdleTime">30</property> 
        <propertyname="maxPoolSize">100</property> 
        <propertyname="minPoolSize">10</property> 
        <propertyname="maxStatements">200</property> 
    </named-config> 
</c3p0-config>

注意:c3p0里面可以配置多个连接信息,可以给每个配置起个名字,这样可以方便的通过配置名称来切换配置信息。


C3P0Util.java:

packagecom.hh.mvcapp.db;
 
importjava.sql.Connection; 
importjava.sql.PreparedStatement; 
importjava.sql.ResultSet; 
importjava.sql.SQLException;
 
importjavax.sql.DataSource;
 
importcom.mchange.v2.c3p0.ComboPooledDataSource; 
publicclass C3P0Util { 
    static DataSource cpds=null; 
    static{         
          cpds= new ComboPooledDataSource("mysql");
          System.out.println(cpds);
    } 
    /**
     * 获得数据库连接 
     */ 
    public static ConnectiongetConnection(){ 
        try { 
            return cpds.getConnection(); 
        } catch (SQLException e) { 
            e.printStackTrace(); 
            return null; 
        } 
    } 
     
    /**
     * 数据库关闭操作
     */ 
    public static void close(Connectionconn,PreparedStatement pst,ResultSet rs){ 
        if(rs!=null){ 
            try { 
                rs.close(); 
            } catch (SQLException e) { 
                e.printStackTrace(); 
            } 
        } 
        if(pst!=null){ 
            try { 
                pst.close(); 
            } catch (SQLException e) { 
               e.printStackTrace(); 
            } 
        } 
 
        if(conn!=null){ 
            try { 
                conn.close(); 
            } catch (SQLException e) { 
                e.printStackTrace(); 
            } 
        } 
    } 
}


接下来是Junit测试类:


packagecom.hh.test;
 
importjava.sql.Connection;
 
importorg.junit.Test;
 
importcom.hh.mvcapp.db.C3P0Util;
 
publicclass C3P0UtilTest {
 
        @Test
        public void testGetConnection() {
               Connectionconnection=C3P0Util.getConnection();
               System.out.println(connection);
        }
}