1:c3p0-config.xml(以下配置了2個數據庫的連接 第一個是默認的庫,第二個是指定的庫)
<?xml version="1.0" encoding="UTF-8" ?> <c3p0-config> <default-config> <property name="jdbcUrl"> <![CDATA[jdbc:mysql:///demo1?user=root&password=1234546&useUnicode=true&characterEncoding=UTF8]]> </property>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<!--連接池中保留的最大連接數。默認值: 15 -->
<property name="maxPoolSize">20</property>
<!-- 連接池中保留的最小連接數,默認為:3 -->
<property name="minPoolSize">2</property>
<!-- 初始化連接池中的連接數,取值應在minPoolSize與maxPoolSize之間,默認為3 -->
<property name="initialPoolSize">10</property>
<!--最大空閑時間,60秒內未使用則連接被丟棄。若為0則永不丟棄。默認值: 0 -->
<property name="maxIdleTime">60</property>
<!-- 當連接池連接耗盡時,客戶端調用getConnection()后等待獲取新連接的時間,超時后將拋出SQLException,如設為0則無限期等待。單位毫秒。默認: 0 -->
<property name="checkoutTimeout">3000</property>
<!--當連接池中的連接耗盡的時候c3p0一次同時獲取的連接數。默認值: 3 -->
<property name="acquireIncrement" >2</property>
<!--定義在從數據庫獲取新連接失敗后重復嘗試的次數。默認值: 30 ;小於等於0表示無限次 -->
<property name="acquireRetryAttempts">0</property>
<!--重新嘗試的時間間隔,默認為:1000毫秒 -->
<property name="acquireRetryDelay">1000</property>
<!--關閉連接時,是否提交未提交的事務,默認為false,即關閉連接,回滾未提交的事務 -->
<property name="autoCommitOnClose">false</property>
<!--c3p0將建一張名為Test的空表,並使用其自帶的查詢語句進行測試。如果定義了這個參數那么屬性preferredTestQuery將被忽略。你不能在這張Test表上進行任何操作,它將只供c3p0測試使用。默認值: null -->
<property name="automaticTestTable">Test</property>
<!--如果為false,則獲取連接失敗將會引起所有等待連接池來獲取連接的線程拋出異常,但是數據源仍有效保留,並在下次調用getConnection()的時候繼續嘗試獲取連接。如果設為true,那么在嘗試獲取連接失敗后該數據源將申明已斷開並永久關閉。默認: false -->
<property name="breakAfterAcquireFailure">false</property>
<!--每60秒檢查所有連接池中的空閑連接。默認值: 0,不檢查 -->
<property name="idleConnectionTestPeriod">60</property>
<!--c3p0全局的PreparedStatements緩存的大小。如果maxStatements與maxStatementsPerConnection均為0,則緩存不生效,只要有一個不為0,則語句的緩存就能生效。如果默認值:0 -->
<property name="maxStatements">100</property>
<!--maxStatementsPerConnection定義了連接池內單個連接所擁有的最大緩存statements數。默認值: 0 -->
</default-config> <!-- 配置第二個數據庫連接 --> <named-config name="a"> <property name="jdbcUrl"> <![CDATA[jdbc:mysql://localhost:3306/a?user=root&password=123456&useUnicode=true&characterEncoding=UTF8]]> </property>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<!--連接池中保留的最大連接數。默認值: 15 -->
<property name="maxPoolSize">20</property>
<!-- 連接池中保留的最小連接數,默認為:3 -->
<property name="minPoolSize">2</property>
<!-- 初始化連接池中的連接數,取值應在minPoolSize與maxPoolSize之間,默認為3 -->
<property name="initialPoolSize">10</property>
<!--最大空閑時間,60秒內未使用則連接被丟棄。若為0則永不丟棄。默認值: 0 -->
<property name="maxIdleTime">60</property>
<!-- 當連接池連接耗盡時,客戶端調用getConnection()后等待獲取新連接的時間,超時后將拋出SQLException,如設為0則無限期等待。單位毫秒。默認: 0 -->
<property name="checkoutTimeout">3000</property>
<!--當連接池中的連接耗盡的時候c3p0一次同時獲取的連接數。默認值: 3 -->
<property name="acquireIncrement" >2</property>
<!--定義在從數據庫獲取新連接失敗后重復嘗試的次數。默認值: 30 ;小於等於0表示無限次 -->
<property name="acquireRetryAttempts">0</property>
<!--重新嘗試的時間間隔,默認為:1000毫秒 -->
<property name="acquireRetryDelay">1000</property>
<!--關閉連接時,是否提交未提交的事務,默認為false,即關閉連接,回滾未提交的事務 -->
<property name="autoCommitOnClose">false</property>
<!--c3p0將建一張名為Test的空表,並使用其自帶的查詢語句進行測試。如果定義了這個參數那么屬性preferredTestQuery將被忽略。你不能在這張Test表上進行任何操作,它將只供c3p0測試使用。默認值: null -->
<property name="automaticTestTable">Test</property>
<!--如果為false,則獲取連接失敗將會引起所有等待連接池來獲取連接的線程拋出異常,但是數據源仍有效保留,並在下次調用getConnection()的時候繼續嘗試獲取連接。如果設為true,那么在嘗試獲取連接失敗后該數據源將申明已斷開並永久關閉。默認: false -->
<property name="breakAfterAcquireFailure">false</property>
<!--每60秒檢查所有連接池中的空閑連接。默認值: 0,不檢查 -->
<property name="idleConnectionTestPeriod">60</property>
<!--c3p0全局的PreparedStatements緩存的大小。如果maxStatements與maxStatementsPerConnection均為0,則緩存不生效,只要有一個不為0,則語句的緩存就能生效。如果默認值:0 -->
<property name="maxStatements">100</property>
<!--maxStatementsPerConnection定義了連接池內單個連接所擁有的最大緩存statements數。默認值: 0 -->
</named-config> </c3p0-config>
2:連接時選擇數據庫
//默認的數據庫,這里不需要參數,c3p0可以自動讀取配置文件中的默認的數據庫 ComboPooledDataSource cpds = new ComboPooledDataSource(); con = cpds.getConnection(); //指定的數據庫,需要參數(數據庫名),c3p0才可以讀取配置文件中的指定的數據庫 ComboPooledDataSource cpds = new ComboPooledDataSource("a"); con = cpds.getConnection();
如果在運行時出現以下的報錯:

則看你配置中是否有出現過這樣的情況,出錯原因是下述配置方式value值類型默認為String類型,因此出錯
<property name="initialPoolSize" value="10">
改成下述的樣式就可以了
<property name="initialPoolSize">10</property>