俗话说“好记性不如烂笔头”,编程的海洋如此的浩大,养成做笔记的习惯是成功的一步!
此笔记主要是c3p0-0.9.1.2版本的笔记,并且笔记都是博主自己一字一字编写和记录,有错误的地方欢迎大家指正。
c3p0数据库池技术,Spring框架就是默认使用此数据库池技术。必须引入jar包:c3p0-0.9.1.2.jar。
1、使用方式一直接ComboPooledDataSource cbds = new ComboPooledDataSource();然后设置相应参数再获取Connection对象。(不推荐)
2、使用Properties配置文件,类似dbcp。
3、使用xml文件。也是使用ComboPooledDataSource cbds = new ComboPooledDataSource();不要再额外配置信息,直接就可以获取Connection对象。
4、使用连接池后,当获取Connection对象时,获取的不是原对象而是代理对象,Connection的close()方法也经过重写,
因此,Connection直接调用close()方法会被连接池收回资源,而并不是真正关闭Connection的链接。在使用时,应当手动调用close()方法,
可以加快连接池的回收,否则影响性能和效率。
xml文件路径跟名字已经固定(必须在src目录下建立c3p0-config.xml),default是使用的默认配置,jnb是指定使用的配置:
<c3p0-config>
<!-- 默认配置的数据源 -->
<default-config>
<!-- 指定数据库的驱动 -->
<property name="driverClass">com.mysql.jdbc.Driver</property>
<!-- 指定数据库的连接URL -->
<property name="jdbcUrl">jdbc:mysql:///books20131012</property> (如果不简写则是jdbc:mysql://localhost:3306/books20131012)
<!-- 指定连接的用户和密码 -->
<property name="user">root</property>
<property name="password">root</property>
<!-- 指定每次增长的连接数目 -->
<property name="acquireIncrement">5</property>
<!-- 指定初始化连接池中的连接数 -->
<property name="initialPoolSize">10</property>
<!-- 指定连接池中的最小连接数 -->
<property name="minPoolSize">5</property>
<!-- 指定连接池中的最大连接数 -->
<property name="maxPoolSize">20</property>
<!--最大空闲时间,单位为秒。1800秒内未使用则连接被丢弃,若为0则永不丢弃。Default: 0 -->
<property name="maxIdleTime" value="1800"></property>
</default-config>
<!-- 指定名字的配置方式 -->
<named-config name="jnb">
<!-- 指定数据库的驱动 -->
<property name="driverClass">com.mysql.jdbc.Driver</property>
<!-- 指定数据库的连接URL -->
<property name="jdbcUrl">jdbc:mysql:///books20131012</property>
<!-- 指定连接的用户和密码 -->
<property name="user">root</property>
<property name="password">root</property>
<!-- 指定每次增长的连接数目 -->
<property name="acquireIncrement">5</property>
<!-- 指定初始化连接池中的连接数 -->
<property name="initialPoolSize">10</property>
<!-- 指定连接池中的最小连接数 -->
<property name="minPoolSize">5</property>
<!-- 指定连接池中的最大连接数 -->
<property name="maxPoolSize">20</property>
<!--最大空闲时间,单位为秒。1800秒内未使用则连接被丢弃,若为0则永不丢弃。Default: 0 -->
<property name="maxIdleTime" value="1800"></property>
</named-config>
</c3p0-config>
使用代码示例:
package cn.itcast.c3p0; import java.beans.PropertyVetoException; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; import com.mchange.v2.c3p0.ComboPooledDataSource; /** * 该类主要对C3P0进行学习 * * @author NingBoJiao * */ public class C3P0Test { //使用的是xml配置文件来获取参数。推荐使用此方法。 private static void test2() throws PropertyVetoException, SQLException { ComboPooledDataSource cbds = new ComboPooledDataSource("jnb"); Connection conn = cbds.getConnection(); String sql = "insert into accounts (name) values ('c3p0 哈哈2')"; PreparedStatement state = conn.prepareStatement(sql); state.execute(); state.close(); conn.close(); } //使用的是硬编码方式,不推荐此方法。 private static void test1() throws PropertyVetoException, SQLException { ComboPooledDataSource cbds = new ComboPooledDataSource(); cbds.setDriverClass("com.mysql.jdbc.Driver"); cbds.setJdbcUrl("jdbc:mysql:///personsystem"); cbds.setUser("root"); cbds.setPassword("root"); cbds.setInitialPoolSize(5); cbds.setMaxPoolSize(10); cbds.setMaxIdleTime(2); cbds.setAcquireIncrement(5); Connection conn = cbds.getConnection(); String sql = "insert into accounts (name) values ('c3p0')"; PreparedStatement state = conn.prepareStatement(sql); state.execute(); state.close(); conn.close(); } }
来源:https://www.cnblogs.com/catgwj/p/7503306.html