java數(shù)據(jù)庫(kù)連接池的特點(diǎn)及步驟
連接池概念
數(shù)據(jù)庫(kù)連接池的基本思想:就是為數(shù)據(jù)庫(kù)連接建立一個(gè)“緩沖池”。預(yù)先在緩沖池中放入一定數(shù)量的連接,當(dāng)需要建立數(shù)據(jù)庫(kù)連接時(shí),只需從“緩沖池”中取出一個(gè),使用完畢之后再放回去。
數(shù)據(jù)庫(kù)連接池負(fù)責(zé)分配、管理和釋放數(shù)據(jù)庫(kù)連接,它允許應(yīng)用程序重復(fù)使用一個(gè)現(xiàn)有的數(shù)據(jù)庫(kù)連接,而不是重新建立一個(gè)。
數(shù)據(jù)庫(kù)連接池在初始化時(shí)將創(chuàng)建一定數(shù)量的數(shù)據(jù)庫(kù)連接放到連接池中,這些數(shù)據(jù)庫(kù)連接的數(shù)量是由最小數(shù)據(jù)庫(kù)連接數(shù)來(lái)設(shè)定的。無(wú)論這些數(shù)據(jù)庫(kù)連接是否被使用,連接池都將一直保證至少擁有這么多的連接數(shù)量。連接池的最大數(shù)據(jù)庫(kù)連接數(shù)量限定了這個(gè)連接池能占有的最大連接數(shù),當(dāng)應(yīng)用程序向連接池請(qǐng)求的連接數(shù)超過最大連接數(shù)量時(shí),這些請(qǐng)求將被加入到等待隊(duì)列中。
傳統(tǒng)連接的缺點(diǎn)
???? ? ?1.普通的JDBC數(shù)據(jù)庫(kù)連接使用DriverManager來(lái)獲取,每次向數(shù)據(jù)庫(kù)建立連接的時(shí)候都要將Connection加載到內(nèi)存中,再驗(yàn)證用戶名和密碼(得花費(fèi)0.05s~1s的時(shí)間)。需要數(shù)據(jù)庫(kù)連接的時(shí)候,就向數(shù)據(jù)庫(kù)要求一個(gè),執(zhí)行完成后再斷開連接。這樣的方式將會(huì)消耗大量的資源和時(shí)間。數(shù)據(jù)庫(kù)的連接資源并沒有得到很好的重復(fù)利用。若同時(shí)有幾百人甚至幾千人在線,頻繁的進(jìn)行數(shù)據(jù)庫(kù)連接操作將占用很多的系統(tǒng)資源,嚴(yán)重的甚至?xí)斐煞?wù)器的崩潰。
? ? ? ? 2.對(duì)于每一次數(shù)據(jù)庫(kù)連接,使用完后都得斷開。否則,如果程序出現(xiàn)異常而未能關(guān)閉,將會(huì)導(dǎo)致數(shù)據(jù)庫(kù)系統(tǒng)中的內(nèi)存泄漏,最終將導(dǎo)致重啟數(shù)據(jù)庫(kù)。(回憶∶何為Java的內(nèi)存泄漏?)
???????3.這種開發(fā)不能控制被創(chuàng)建的連接對(duì)象數(shù),系統(tǒng)資源會(huì)被毫無(wú)顧及的分配出去,如連接過多,中可能導(dǎo)致空存泄漏,服務(wù)器崩潰。
數(shù)據(jù)庫(kù)連接池的優(yōu)點(diǎn)
提高程序的響應(yīng)速度(減少創(chuàng)建連接相應(yīng)的時(shí)間)減低資源的消耗(可以重復(fù)使用以及提供好的連接)便于連接的管理
實(shí)現(xiàn)方法
DBCP 是Apache提供的數(shù)據(jù)庫(kù)連接池。tomcat 服務(wù)器自帶dbcp數(shù)據(jù)庫(kù)連接池。速度相對(duì)c3p0較快,但因自身存在BUG,Hibernate3已不再提供支持。
C3P0 是一個(gè)開源組織提供的一個(gè)數(shù)據(jù)庫(kù)連接池,速度相對(duì)較慢,穩(wěn)定性還可以。hibernate官方推薦使用
Proxool 是sourceforge下的一個(gè)開源項(xiàng)目數(shù)據(jù)庫(kù)連接池,有監(jiān)控連接池狀態(tài)的功能,穩(wěn)定性較c3p0差一點(diǎn)
BoneCP 是一個(gè)開源組織提供的數(shù)據(jù)庫(kù)連接池,速度快
Druid 是阿里提供的數(shù)據(jù)庫(kù)連接池,據(jù)說(shuō)是集DBCP 、C3P0 、Proxool 優(yōu)點(diǎn)于一身的數(shù)據(jù)庫(kù)連接池,但是速度不確定是否有BoneCP快
演示Druid連接
連接步驟:①導(dǎo)入jar包,②測(cè)試連接代碼,③寫配置文件
????????Druid是阿里巴巴開源平臺(tái)上一個(gè)數(shù)據(jù)庫(kù)連接池實(shí)現(xiàn),它結(jié)合了C3P0、DBCP、Proxool等DB池的優(yōu)點(diǎn),同時(shí)加入了日志監(jiān)控,可以很好的監(jiān)控DB池連接和SQL的執(zhí)行情況,可以說(shuō)是針對(duì)監(jiān)控而生的DB連接池,**可以說(shuō)是目前最好的連接池之一。
DRUID
①導(dǎo)包

②測(cè)試連接代碼

③寫配置文件

QueryRunner插入操作
public static void testInsert() {
Connection conn = null;
try {
QueryRunner runner = new QueryRunner();
conn = JDBCUtils.getConnection3();
String sql = "insert into customers(name,email,bitrh)values(?,?,?)";
int insertCount = runner.update(conn, sql, "陳子宏", "chenzihong@123", "1994-09-09");
System.out.println("添加了" + insertCount + "條記錄");
} catch (SQLException e) {
e.printStackTrace();
} finally {
JDBCUtils.colseResource(conn, null);
}
}
QueryRunner查詢操作
//測(cè)試查詢:BeanHander:是ResultSetHandler接口的實(shí)現(xiàn)類,用于封裝表中的一條記錄
public static void testQuery1() {
Connection conn = null;
try {
QueryRunner runner = new QueryRunner();
conn = JDBCUtils.getConnection3();
String sql = "select id,name,email,birth from customers where id =?";
BeanHandler<Customer> handler = new BeanHandler<>(Customer.class);
Customer customer = runner.query(conn, sql, handler, 21);
System.out.println(customer);
} catch (SQLException e) {
e.printStackTrace();
} finally {
JDBCUtils.colseResource(conn, null);
}
}
到此這篇關(guān)于數(shù)據(jù)庫(kù)連接池的特點(diǎn)及步驟的文章就介紹到這了,更多相關(guān)數(shù)據(jù)庫(kù)連接池內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 詳解Java的JDBC API的存儲(chǔ)過程與SQL轉(zhuǎn)義語(yǔ)法的使用
- 詳解Java的JDBC API中事務(wù)的提交和回滾
- Java編程中使用JDBC API連接數(shù)據(jù)庫(kù)和創(chuàng)建程序的方法
- 在Java的Spring框架的程序中使用JDBC API操作數(shù)據(jù)庫(kù)
- Java操作數(shù)據(jù)庫(kù)連接池案例講解
- 詳解Java數(shù)據(jù)庫(kù)連接池
- Java數(shù)據(jù)庫(kù)連接池技術(shù)的入門教程
- Java JDBC API介紹與實(shí)現(xiàn)數(shù)據(jù)庫(kù)連接池流程
相關(guān)文章
解決springboot上傳圖片后無(wú)法立即訪問需重啟的問題
這篇文章主要介紹了解決springboot上傳圖片后無(wú)法立即訪問需重啟的問題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12
springboot 2.3之后消失的hibernate-validator解決方法
這篇文章主要介紹了springboot 2.3之后消失的hibernate-validator解決方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08
Token登陸驗(yàn)證機(jī)制的原理及實(shí)現(xiàn)
這篇文章介紹了Token登陸驗(yàn)證機(jī)制的原理及實(shí)現(xiàn),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-12-12
Java組件commons fileupload實(shí)現(xiàn)文件上傳功能
這篇文章主要為大家詳細(xì)介紹了Java組件commons fileupload實(shí)現(xiàn)文件上傳功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-10-10
SpringBoot中的配置文件加載優(yōu)先級(jí)詳解
這篇文章主要介紹了SpringBoot中的配置文件加載優(yōu)先級(jí)詳解,springboot啟動(dòng)會(huì)掃描以下位置的application.properties或者application.yml文件作為Spring?boot的默認(rèn)配置文件,需要的朋友可以參考下2024-01-01
SpringBoot應(yīng)用的打包和發(fā)布實(shí)現(xiàn)
本文主要介紹了SpringBoot應(yīng)用的打包和發(fā)布實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04
Java 9中如何對(duì)IntegerCache進(jìn)行修改詳解
這篇文章主要給大家介紹了關(guān)于Java 9中如何對(duì)IntegerCache進(jìn)行修改的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或使用java9具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起看看吧。2017-12-12
Spring Cloud @RefreshScope 原理及使用
這篇文章主要介紹了Spring Cloud @RefreshScope 原理及使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01
帶你一文深入認(rèn)識(shí)Java?String類
這篇文章主要介紹了帶你一文深入認(rèn)識(shí)Java?String類,String 類在Java中是很常用的類,很重要的類,在后續(xù)的學(xué)習(xí)中經(jīng)常會(huì)用到,是后續(xù)學(xué)習(xí)的基礎(chǔ), 文章圍繞主題展開更多詳細(xì)內(nèi)容,需要的小伙伴可以參考一下,希望對(duì)你的學(xué)習(xí)有所幫助2022-06-06

