目錄
一:連接池介紹
1.1連接池解決的問題
?2.常用的數據庫連接池
二:c3p0介紹
2.1C3P0介紹:
2.2C3P0快速入門
1.常用參數說明
2.API介紹
3.使用步驟
1.導入jar包c3p0-0.9.1.2.jar ?
2.編寫c3p0-config.xml配置文件,配置對應參數
3.將配置文件放在src目錄下
4.創建連接池對象ComboPooledDataSource,使用默認配置或命名配置 ?
5.從連接池獲取對象
6.使用對象操作數據庫,查詢表中所有數據并輸出到控制臺
7.關閉資源
三:使用總結
1.使用事項注意
?2.使用C3P0的優點
一:連接池介紹
1、操作數據庫都需要創建連接,操作完成還需要關閉連接
2、創建連接和關閉連接需要可能比執行sql需要的時間都長
3、一個網站需要高頻繁的訪問數據庫,如果短時間頻繁的訪問數據庫服務器,就容易造成服務器的宕機,即死機。
1.1連接池解決的問題
?在以往的jdbc程序每次訪問數據庫都需要創建一個新的連接,訪問完畢之后,還需要釋放資源。那么在這樣的一個過程中,連接的創建和銷毀所消耗的資源是遠遠大于我們發送sql并執行的時間的。基于這樣的情況,我們發現我們的jdbc程序將大量的資源浪費在了連接的創建和銷毀上。
舉例:就像在上海坐地鐵,就一站2分鐘的路程,往往在買地鐵票的過程需要等待至少10分鐘以上的時間。這樣是不合理的。所以我們 需要對這樣的結構進行優化。
思考上面的結構,大部分的時間浪費在了創建和銷毀上。那么我們能不能實現將這些連接回收和利用呢?這樣我們就不需要不停的創建和銷毀了。只需要創建一次,放在指定的地方。當我們使用的時候,直接從里面拿就行了。用完放回原來的地方。不去銷毀,當我再次使用的時候,去拿就行了。而這樣的解決方案就是我們需要的。
優化后的結構如下:
說明:首先創建一定數量的連接,然后放到指定的地方。當我們需要獲取連接的時候,直接從指定的地方獲取。用完了,我們再將連接放回去。這樣就能將我們連接的回收利用。并且不用花費大量時間在創建和銷毀連接上。
?2.常用的數據庫連接池
javax.sql.DataSource
表示數據庫連接池,DataSource本身只是Sun公司提供的一個接口,沒有具體的實現,它的實現由連接池的數據庫廠商去實現。我們只需要學習這個工具如何使用即可。
?常用的連接池實現組件有以下這些:
阿里巴巴-德魯伊Druid連接池:Druid是阿里巴巴開源平臺上的一個項目,整個項目由數據庫連接池、插件框架和SQL解析器組成。該項目主要是為了擴展JDBC的一些限制,可以讓程序員實現一些特殊的需求。
C3P0是一個開源的JDBC連接池,支持JDBC3規范和JDBC2的標準擴展。目前使用它的開源項目有Hibernate,Spring等。C3P0有自動回收空閑連接功能。
DBCP(DataBase Connection Pool)數據庫連接池,是Apache上的一個Java連接池項目。dbcp沒有自動回收空閑連接的功能。
二:c3p0介紹
2.1C3P0介紹:
C3P0 是一個開源的JDBC連接池,目前spring 和 hibernate框架對C3P0是支持的。使用c3p0數據庫連接池之前,首先需要在資料中找到如下的jar包,加載到項目
2.2C3P0快速入門
1.常用參數說明
參數 | 說明 |
---|---|
driverClass | 數據庫驅動類。例如:com.mysql.jdbc.Driver |
jdbcUrl | 連接數據庫的url地址。例如:jdbc:mysql://localhost:3306/day05_db |
user | 連接數據庫的用戶名。例如:root |
password | 連接數據庫的密碼。例如:1234 |
initialPoolSize | 剛創建好連接池的時候連接數量 |
maxPoolSize | 連接池中最多可以放多少個連接 |
2.API介紹
com.mchange.v2.c3p0.ComboPooledDataSource
類表示C3P0的連接池對象,常用2種創建連接池的方式:
1.無參構造,使用默認配置
,
2.有參構造,使用命名配置
?public ComboPooledDataSource()
無參構造使用默認配置(使用xml中default-config標簽中對應的參數)
public ComboPooledDataSource(String configName)
有參構造使用命名配置(configName:xml中配置的名稱,使用xml中named-config標簽中對應的參數)?
?public Connection getConnection() throws SQLException
從連接池中取出一個連接
3.使用步驟
1.導入jar包c3p0-0.9.1.2.jar
?
2.編寫c3p0-config.xml
配置文件,配置對應參數
<?xml version="1.0" encoding="utf-8" ?>
<!--配置的跟標簽-->
<c3p0-config><!--默認數據源配置--><default-config><property name="driverClass">com.mysql.jdbc.Driver</property><property name="jdbcUrl">jdbc:mysql://數據庫名稱</property><property name="user">root</property><property name="password">1234</property><property name="initialPoolSize">10</property><property name="maxIdleTime">30</property><property name="maxPoolSize">100</property><property name="minPoolSize">10</property></default-config><!-- This app is massive! --><named-config name="xx"></named-config>
</c3p0-config>
3.將配置文件放在src目錄下
4.創建連接池對象ComboPooledDataSource
,使用默認配置或命名配置 ?
//創建數據源(連接池對象)對象,自動加載src根路徑下c3p0-config.xmlComboPooledDataSource dataSource = new ComboPooledDataSource();
5.從連接池獲取對象
//獲取連接對象Connection conn = dataSource.getConnection();
6.使用對象操作數據庫,查詢表中所有數據并輸出到控制臺
//3)創建發送sql的對象Statement stm = conn.createStatement();//4)發送sql語句,獲取ResultSet結果集String selectSql="select * from user";ResultSet rs = stm.executeQuery(selectSql);//5)解析結果集ArrayList<User> users = new ArrayList<>();while (rs.next()){int id=rs.getInt(1);String name=rs.getString("username");String password=rs.getString(3);User user = new User();user.setId(id);user.setPassword(password);user.setUserName(name);users.add(user);}System.out.println(users);
7.關閉資源
//6)close 歸還連接對象到連接池rs.close();stm.close();conn.close();
三:使用總結
1.使用事項注意
C3P0配置文件名稱必須為
c3p0-config.xml
C3P0命名配置可以有多個 ?
?2.使用C3P0的優點
1. 高效性:C3P0數據庫連接池通過最小化數據庫連接的創建和釋放操作,提供快速和高效的數據庫連接,從而顯著提高了系統的響應速度和性能。
2. 連接管理:C3P0數據庫連接池可以自動管理和監控連接的可用性和狀態,包括連接的創建、分配、回收和銷毀等操作,減輕了開發人員的工作負擔。
3. 連接重用:C3P0數據庫連接池可以重用已經建立的數據庫連接,避免每次都重新創建連接,從而減少了數據庫的負載和開銷。
4. 連接池配置:C3P0數據庫連接池提供了豐富的配置選項,可以根據具體的需求進行靈活的配置,包括最大連接數、最小連接數、連接超時等參數的設置。
5. 連接緩存:C3P0數據庫連接池可以緩存數據庫連接,避免了頻繁地創建和銷毀連接的開銷,提高了數據庫操作的效率。
6. 連接錯誤處理:C3P0數據庫連接池可以處理連接異常和錯誤情況,包括連接超時、連接池溢出等,提供了容錯機制,保證了系統的穩定性和可靠性。
7. 連接監控:C3P0數據庫連接池可以監控連接的使用情況和狀態,包括連接的活躍數、空閑數等,提供了連接池的性能統計和監控功能。
8. 跨平臺兼容性:C3P0數據庫連接池是一個開源的Java庫,可以在不同的操作系統和數據庫系統上使用,具有良好的跨平臺兼容性。