JDBC-C3P0連線池
阿新 • • 發佈:2021-12-17
C3P0連線池的使用
1.準備JAR包
(1)c3p0-0.9.5.2.jar C3P0的核心包
(2)mchange-commons-java-0.2.15 C3P0依賴的工具包
2.匯入專案
3.配置連線池的方法
3.1 通過資料來源物件配置
//建立一個數據源物件 private static ComboPooledDataSource cpd = new ComboPooledDataSource(); static{ //1.配置驅動 try { cpd.setDriverClass("com.mysql.cj.jdbc.Driver"); } catch (PropertyVetoException e) { System.err.println("mysql驅動加載出錯!"); e.printStackTrace(); } //2.設定URL cpd.setJdbcUrl("jdbc:mysql://127.0.0.1:3306/huawei?autoReconnect=true&characterEncoding=UTF-8&serverTimezone=UTC"); //3.設定使用者名稱 cpd.setUser("root"); //4.設定密碼 cpd.setPassword("root123456"); //5.設定連線池的大小 cpd.setInitialPoolSize(20); }
3.2 通過properties 配置檔案配置C3P0的內容
配置檔案示例:配置檔案一定要叫 c3p0.properties
c3p0.driverClass=com.mysql.cj.jdbc.Driver c3p0.jdbcUrl=jdbc:mysql://127.0.0.1:3306/huawei?autoReconnect=true&characterEncoding=UTF-8&serverTimezone=UTC c3p0.user=root c3p0.password=root123456 c3p0.initialPoolSize=20 c3p0.maxIdleTime=60 c3p0.maxPoolSize=30
配置檔案防止的位置在SRC根目錄下
++IDEA最好建立一個Resource目錄存放配置檔案
配置好後如何獲取連線?
//保證配置正確只需建立一個數據源物件就可以使用了
private static ComboPooledDataSource cpd = new ComboPooledDataSource();
3.3 通過c3p0-config.xml 配置檔案配置
將配置檔案放在IDEA資原始檔目錄下即可(同properties檔案)
c3p0-config.xml 配置示例
<?xml version="1.0" encoding="UTF-8"?> <c3p0-config> <!-- 預設配置 --> <default-config> <!-- 驅動 --> <property name="driverClass">com.mysql.cj.jdbc.Driver</property> <!-- jdbcUrl --> <!-- 1.將url使用轉義標籤<![CDATA[JDBCUrl]]> 2.將&換為& --> <property name="jdbcUrl">jdbc:mysql://127.0.0.1:3306/huawei?autoReconnect=true&characterEncoding=UTF-8&serverTimezone=UTC</property> <!-- 使用者名稱 --> <property name="user">root</property> <!-- 密碼 --> <property name="password">root123456</property> </default-config> </c3p0-config>
多資料來源配置方式:
<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
<!-- 預設配置 -->
<default-config>
<!-- 驅動 -->
<property name="driverClass">com.mysql.cj.jdbc.Driver</property>
<!-- jdbcUrl -->
<!-- 1.將url使用轉義標籤<![CDATA[JDBCUrl]]>
2.將&換為&
-->
<property name="jdbcUrl">jdbc:mysql://127.0.0.1:3306/huawei?autoReconnect=true&characterEncoding=UTF-8&serverTimezone=UTC</property>
<!-- 使用者名稱 -->
<property name="user">root</property>
<!-- 密碼 -->
<property name="password">root123456</property>
</default-config>
<!-- 資料來源2 -->
<named-config name="data2">
<!-- 驅動 -->
<property name="driverClass">com.mysql.cj.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://127.0.0.1:3306/mysql?autoReconnect=true&characterEncoding=UTF-8&serverTimezone=UTC</property>
<!-- 使用者名稱 -->
<property name="user">root</property>
<!-- 密碼 -->
<property name="password">root123456</property>
</named-config>
</c3p0-config>
配置完成後只需建立資料來源物件即可:
++注意:資料來源物件建立呼叫無參構造器代表呼叫的是預設配置資料來源(default-config)
//建立一個數據源物件,構造器如果是無參構造器,載入預設資料來源配置
private static ComboPooledDataSource cpd = new ComboPooledDataSource();
++ 如果有參,則傳入在xml配置中的<named-config name="data2">
的name屬性值載入對應資料來源
private static ComboPooledDataSource cpd = new ComboPooledDataSource("data2");
4.獲取連線
/**
* 從C3P0獲取連線的方法
* @return
*/
public static Connection getCon() throws SQLException {
Connection con = cpd.getConnection();//呼叫資料來源物件的getConnection方法
return con;
}
5.歸還連線
在C3P0中,歸還連線的方法就是呼叫Connection物件的close方法
/**
* 歸還連線到C3P0
* @param con
*/
public static void returnCon(Connection con){
try {
con.close();
} catch (SQLException e) {
System.out.println("連線歸還C3P0出錯!");
e.printStackTrace();
}
}