1:c3p0-config.xml(如下配置了2個數據庫的鏈接 第一個是默認的庫,第二個是指定的庫)mysql
<?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>sql
<!--最大空閒時間,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>ui
<!--從新嘗試的時間間隔,默認爲:1000毫秒 -->
<property name="acquireRetryDelay">1000</property>spa
<!--關閉鏈接時,是否提交未提交的事務,默認爲false,即關閉鏈接,回滾未提交的事務 -->
<property name="autoCommitOnClose">false</property>線程
<!--c3p0將建一張名爲Test的空表,並使用其自帶的查詢語句進行測試。若是定義了這個參數那麼屬性preferredTestQuery將被忽略。你不能在這張Test表上進行任何操做,它將只供c3p0測試使用。默認值: null -->
<property name="automaticTestTable">Test</property>code
<!--若是爲false,則獲取鏈接失敗將會引發全部等待鏈接池來獲取鏈接的線程拋出異常,可是數據源仍有效保留,並在下次調用getConnection()的時候繼續嘗試獲取鏈接。若是設爲true,那麼在嘗試獲取鏈接失敗後該數據源將申明已斷開並永久關閉。默認: false -->
<property name="breakAfterAcquireFailure">false</property>xml
<!--每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>