c3p0(數據庫連接池)私人學習筆記

俗話說“好記性不如爛筆頭”,編程的海洋如此的浩大,養成做筆記的習慣是成功的一步!


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

}


發佈了48 篇原創文章 · 獲贊 10 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章