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ù)超過(guò)最大連接數(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í)行完成后再斷開(kāi)連接。這樣的方式將會(huì)消耗大量的資源和時(shí)間。數(shù)據(jù)庫(kù)的連接資源并沒(méi)有得到很好的重復(fù)利用。若同時(shí)有幾百人甚至幾千人在線,頻繁的進(jìn)行數(shù)據(jù)庫(kù)連接操作將占用很多的系統(tǒng)資源,嚴(yán)重的甚至?xí)斐煞?wù)器的崩潰。
? ? ? ? 2.對(duì)于每一次數(shù)據(jù)庫(kù)連接,使用完后都得斷開(kāi)。否則,如果程序出現(xiàn)異常而未能關(guān)閉,將會(huì)導(dǎo)致數(shù)據(jù)庫(kù)系統(tǒng)中的內(nèi)存泄漏,最終將導(dǎo)致重啟數(shù)據(jù)庫(kù)。(回憶∶何為Java的內(nèi)存泄漏?)
???????3.這種開(kāi)發(fā)不能控制被創(chuàng)建的連接對(duì)象數(shù),系統(tǒng)資源會(huì)被毫無(wú)顧及的分配出去,如連接過(guò)多,中可能導(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è)開(kāi)源組織提供的一個(gè)數(shù)據(jù)庫(kù)連接池,速度相對(duì)較慢,穩(wěn)定性還可以。hibernate官方推薦使用
Proxool 是sourceforge下的一個(gè)開(kāi)源項(xiàng)目數(shù)據(jù)庫(kù)連接池,有監(jiān)控連接池狀態(tài)的功能,穩(wěn)定性較c3p0差一點(diǎn)
BoneCP 是一個(gè)開(kāi)源組織提供的數(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è)試連接代碼,③寫(xiě)配置文件
????????Druid是阿里巴巴開(kāi)源平臺(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è)試連接代碼
③寫(xiě)配置文件
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)類(lèi),用于封裝表中的一條記錄 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ǔ)過(guò)程與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ù)的入門(mén)教程
- Java JDBC API介紹與實(shí)現(xiàn)數(shù)據(jù)庫(kù)連接池流程
相關(guān)文章
Spring?IOC中對(duì)象的創(chuàng)建、策略及銷(xiāo)毀時(shí)機(jī)和生命周期詳解
這篇文章主要介紹了Spring?IOC中對(duì)象的創(chuàng)建、策略及銷(xiāo)毀時(shí)機(jī)和生命周期詳解,Spring默認(rèn)使用類(lèi)的空參構(gòu)造方法創(chuàng)建bean,假如類(lèi)沒(méi)有空參構(gòu)造方法,將無(wú)法完成bean的創(chuàng)建,需要的朋友可以參考下2023-08-08mybatis中foreach報(bào)錯(cuò):_frch_item_0 not found的解決方法
這篇文章主要給大家介紹了mybatis中foreach報(bào)錯(cuò):_frch_item_0 not found的解決方法,文章通過(guò)示例代碼介紹了詳細(xì)的解決方法,對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。2017-06-06SpringBoot使用jasypt加解密密碼的實(shí)現(xiàn)方法
這篇文章主要介紹了SpringBoot使用jasypt加解密密碼的實(shí)現(xiàn)方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-10-10mybatis中查詢結(jié)果為空時(shí)不同返回類(lèi)型對(duì)應(yīng)返回值問(wèn)題
這篇文章主要介紹了mybatis中查詢結(jié)果為空時(shí)不同返回類(lèi)型對(duì)應(yīng)返回值問(wèn)題,本文分幾種方法給大家介紹的非常詳細(xì),需要的朋友可以參考下2019-10-10springBoot使用JdbcTemplate代碼實(shí)例
這篇文章主要介紹了springBoot使用JdbcTemplate代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-09-09