C3P0數據庫連接池

目錄

一:連接池介紹

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公司提供的一個接口,沒有具體的實現,它的實現由連接池的數據庫廠商去實現。我們只需要學習這個工具如何使用即可。

?常用的連接池實現組件有以下這些:

  1. 阿里巴巴-德魯伊Druid連接池:Druid是阿里巴巴開源平臺上的一個項目,整個項目由數據庫連接池、插件框架和SQL解析器組成。該項目主要是為了擴展JDBC的一些限制,可以讓程序員實現一些特殊的需求。

  2. C3P0是一個開源的JDBC連接池,支持JDBC3規范和JDBC2的標準擴展。目前使用它的開源項目有Hibernate,Spring等。C3P0有自動回收空閑連接功能。

  3. 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庫,可以在不同的操作系統和數據庫系統上使用,具有良好的跨平臺兼容性。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/35831.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/35831.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/35831.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Python 中字符串修飾符

1. 原始字符串 (Raw String) - r 或 R 使用 r 或 R 前綴&#xff0c;可以告訴 Python 字符串中的所有反斜杠都是普通字符&#xff0c;而不是轉義字符。這在處理文件路徑、正則表達式等情況下非常有用。 path rC:\new_folder\test.txt # 原始字符串2. 格式化字符串 (Formatt…

第十九條:要么為繼承而設計并提供文檔說明,要么就禁止繼承

在前面一條中&#xff0c;我們已經知道了David寫了A類被Tom拿去繼承了&#xff0c;導致了A類的封裝性遭到了破壞&#xff0c;那么有沒有可能做點事情避免此事發生呢&#xff1f;第十九條孕育而生&#xff01;David在創建A類的時候寫上文檔說明&#xff0c;說Al類不允許任何類來…

node 實現導出, 在導出excel中包含圖片(附件)

如果想查看 node mySql 實現數據的導入導出&#xff0c;以及導入批量插入的sql語句&#xff0c;連接如下 node mySql 實現數據的導入導出&#xff0c;以及導入批量插入的sql語句-CSDN博客https://blog.csdn.net/snows_l/article/details/139998373 一、效果如圖&#xff1a; 二…

中介子方程三十四

XXFXXuXXWXXuXXdXXrXXαXXuXpXXKXηXiXXαXXiXηXKXXpXuXXαXXrXXdXXuXWXπXXWXeXyXeXbXπXpXXNXXqXeXXrXXαXXuXpXXKXηXiXXαXXiXηXKXXpXuXXαXXrXXeXqXXNXXpXπXbXeXyXeXWXXπXWXuXXdXXrXXαXXuXpXXKXηXiXXαXXiXηXKXXpXuXXαXXrXXdXXuXXWXXuXXFXXEXXyXXEXXrXXαXXuXpXXK…

paraview跨節點并行渲染

參考&#xff1a; https://cloud.tencent.com/developer/ask/sof/101483588 ParaView 支持使用其內置的網絡拓撲來進行跨節點的并行渲染。以下是一個簡單的步驟來設置和運行跨節點的并行渲染&#xff1a; 確保你的計算環境支持多節點計算&#xff0c;比如通過SSH、MPI或其他集…

阿里云擴容

官網&#xff1a;https://help.aliyun.com/zh/ecs/user-guide/extend-the-partitions-and-file-systems-of-disks-on-a-linux-instance?spm5176.ecs-console-storage_disk.help.dexternal.72d24df5QOL4ss 博客&#xff1a;http://t.csdnimg.cn/cUykr

Android APP通過View修改鼠標樣式

app view上修改鼠標樣式比較簡單&#xff0c;使用如下方法修改為自定義圖片&#xff1a; getWindow().getDecorView().setPointerIcon(PointerIcon.load(getResources(), R.drawable.pointer_spot_touch_icon)); 設置鼠標樣式setPointerIcon的調用棧 frameworks/base/core/jav…

C語言:流量控制

前言 流量控制可以讓發送端根據接收端的實際接受能力控制發送的數據量。它的具體操作是&#xff0c;接收端主機向發送端主機通知自己可以接收數據的大小&#xff0c;于是發送端會發送不會超過該大小的數據&#xff0c;該限制大小即為窗口大小&#xff0c;即窗口大小由接收端主…

【Linux詳解】進程的狀態 | 運行 阻塞 掛起 | 僵尸和孤兒狀態

目錄 操作系統中 運行狀態 阻塞狀態 進程狀態轉換 Linux系統中 查看進程狀態 深度睡眠狀態 T 暫停狀態 Z 僵尸狀態 孤兒狀態 文章手稿 xmind: 引言 介紹系統中的進程狀態及其管理方式。將通過結合操作系統原理和實際代碼示例&#xff0c;詳細說明進程的各種狀態、轉換…

鴻蒙開發Ability Kit(程序框架服務):【FA模型切換Stage模型指導】 app和deviceConfig的切換

app和deviceConfig的切換 為了便于開發者維護應用級別的屬性配置&#xff0c;Stage模型將config.json中的app和deviceConfig標簽提取到了app.json5中進行配置&#xff0c;并對部分標簽名稱進行了修改&#xff0c;具體差異見下表。 表1 配置文件app標簽差異對比 配置項FA模型…

Excel中的“點選輸入”——次級下拉列表創建

在Excel中&#xff0c;用“數據驗證”功能可以設置下拉列表&#xff0c;二級下拉列表需要設置公式。 (筆記模板由python腳本于2024年06月16日 18:36:37創建&#xff0c;本篇筆記適合經常使用Excel處理數據的coder翻閱) 【學習的細節是歡悅的歷程】 Python 官網&#xff1a;http…

基于 Spring AOP 實現安全檢查

在現代應用程序中&#xff0c;安全性是一個至關重要的方面。通過對系統中的關鍵操作進行安全檢查&#xff0c;可以有效防止未授權的訪問和操作。Spring AOP&#xff08;面向切面編程&#xff09;提供了一種優雅的方式來實現安全檢查&#xff0c;而無需修改業務邏輯代碼。本文將…

后端之路第三站(Mybatis)——入門配置

一、Mybatis是啥&#xff1f; 就是一個用java來操控數據庫的框架語言 之前學的datagrip或者navicat這些軟件里我們操作數據庫&#xff0c;原理是我們編寫完的操作語句發送到服務器傳送到數據庫系統&#xff0c;然后數據庫執行完之后再發送給服務器返回給datagrip或者navicat顯…

【linux/shell案例實戰】shell界面命令快捷鍵

快捷鍵及含義&#xff1a; Ctrl&#xff0b;u剪切光標之前的內容。Ctul&#xff0b;k剪切光標之后的內容。Ctrl&#xff0b;e讓光標移動到命令最前&#xff0c;Ctrl&#xff0b;a讓光標移動到命令最后Ctrl&#xff0b;y 粘貼剛才所刪除的內容。Ctrl&#xff0b;d 刪除光標所在…

GPT-5:AI的博士時代與我們的未來

目錄 引言第一部分&#xff1a;GPT-5技術突破預測1. NLP技術的革新1.1 算法進步對理解力提升的影響1.2 技術突破推動行業發展 2. 行業推動力2.1 教育行業的變革2.2 醫療行業的創新2.3 法律行業的效率提升 第二部分&#xff1a;智能系統與人類的協作1. 輔助決策的角色1.1 決策支…

游戲AI的創造思路-技術基礎-sigmoid函數詳解

在前面的機器學習和深度學習的內容中&#xff0c;大量出現了sigmoid函數&#xff0c;所以本篇為大家介紹下sigmoid函數&#xff0c;希望對大家理解前面的算法和后面的Transformer有所幫助 目錄 3.8. sigmoid函數 3.8.1. 定義 3.8.2. 性質 3.8.3. 應用 3.8.4. 缺點 3.8.5.…

Flutter實現頁面間傳參

帶參跳轉 步驟 在router中配置這個路由需要攜帶的參數,這里的參數是 arguments,注意要用花括號包裹參數名稱 在相應組件中實現帶參構造函數 在state類中可以直接使用${widget.arguments}來訪問到傳遞的參數 在其他頁面中使用Navigator.pushNamed()帶參跳轉

【昇思初學入門】第八天打卡-模型保存與加載

模型保存與加載 學習心得 保存 CheckPoint 格式文件&#xff0c;在模型訓練過程中&#xff0c;可以添加檢查點(CheckPoint)用于保存模型的參數&#xff0c;以便進行推理及再訓練使用。如果想繼續在不同硬件平臺上做推理&#xff0c;可通過網絡和CheckPoint格式文件生成對應的…

C++中常用的標志庫

標準庫 C標準庫是一個強大的工具集&#xff0c;它包含了一組豐富的類和函數&#xff0c;可以幫助開發者進行各種操作&#xff0c;如輸入輸出、字符串操作、數據結構管理、算法實現等。以下是一些常用的C標準庫及其使用方法。 1. 輸入輸出庫 <iostream> 用于標準輸入輸…

2024年最新通信安全員考試題庫

61.架設架空光纜&#xff0c;可使用吊板作業的情況是&#xff08;&#xff09;。 A.在2.2/7規格的電桿與墻壁之間的吊線上&#xff0c;吊線高度5m B.在2.2/7規格的墻壁與墻壁之間的吊線上&#xff0c;吊線高度6m C.在2.2/7規格的電桿與電桿之間的吊線上&#xff0c;吊線高度…