c3p0(数据库连接池)私人学习笔记

半城伤御伤魂 提交于 2019-12-26 05:25:38

俗话说“好记性不如烂笔头”,编程的海洋如此的浩大,养成做笔记的习惯是成功的一步!


此笔记主要是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();
	}

}


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