您好,登錄后才能下訂單哦!
java數(shù)據(jù)庫連接池的特點(diǎn)及步驟是什么,很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。
數(shù)據(jù)庫連接池的基本思想:就是為數(shù)據(jù)庫連接建立一個(gè)“緩沖池”。預(yù)先在緩沖池中放入一定數(shù)量的連接,當(dāng)需要建立數(shù)據(jù)庫連接時(shí),只需從“緩沖池”中取出一個(gè),使用完畢之后再放回去。
數(shù)據(jù)庫連接池負(fù)責(zé)分配、管理和釋放數(shù)據(jù)庫連接,它允許應(yīng)用程序重復(fù)使用一個(gè)現(xiàn)有的數(shù)據(jù)庫連接,而不是重新建立一個(gè)。
數(shù)據(jù)庫連接池在初始化時(shí)將創(chuàng)建一定數(shù)量的數(shù)據(jù)庫連接放到連接池中,這些數(shù)據(jù)庫連接的數(shù)量是由最小數(shù)據(jù)庫連接數(shù)來設(shè)定的。無論這些數(shù)據(jù)庫連接是否被使用,連接池都將一直保證至少擁有這么多的連接數(shù)量。連接池的最大數(shù)據(jù)庫連接數(shù)量限定了這個(gè)連接池能占有的最大連接數(shù),當(dāng)應(yīng)用程序向連接池請(qǐng)求的連接數(shù)超過最大連接數(shù)量時(shí),這些請(qǐng)求將被加入到等待隊(duì)列中。
1.普通的JDBC數(shù)據(jù)庫連接使用DriverManager來獲取,每次向數(shù)據(jù)庫建立連接的時(shí)候都要將Connection加載到內(nèi)存中,再驗(yàn)證用戶名和密碼(得花費(fèi)0.05s~1s的時(shí)間)。需要數(shù)據(jù)庫連接的時(shí)候,就向數(shù)據(jù)庫要求一個(gè),執(zhí)行完成后再斷開連接。這樣的方式將會(huì)消耗大量的資源和時(shí)間。數(shù)據(jù)庫的連接資源并沒有得到很好的重復(fù)利用。若同時(shí)有幾百人甚至幾千人在線,頻繁的進(jìn)行數(shù)據(jù)庫連接操作將占用很多的系統(tǒng)資源,嚴(yán)重的甚至?xí)斐?a title="服務(wù)器" target="_blank" href="http://kemok4.com/">服務(wù)器的崩潰。
2.對(duì)于每一次數(shù)據(jù)庫連接,使用完后都得斷開。否則,如果程序出現(xiàn)異常而未能關(guān)閉,將會(huì)導(dǎo)致數(shù)據(jù)庫系統(tǒng)中的內(nèi)存泄漏,最終將導(dǎo)致重啟數(shù)據(jù)庫。(回憶∶何為Java的內(nèi)存泄漏?)
3.這種開發(fā)不能控制被創(chuàng)建的連接對(duì)象數(shù),系統(tǒng)資源會(huì)被毫無顧及的分配出去,如連接過多,中可能導(dǎo)致空存泄漏,服務(wù)器崩潰。
提高程序的響應(yīng)速度(減少創(chuàng)建連接相應(yīng)的時(shí)間)減低資源的消耗(可以重復(fù)使用以及提供好的連接)便于連接的管理
DBCP 是Apache提供的數(shù)據(jù)庫連接池。tomcat 服務(wù)器自帶dbcp數(shù)據(jù)庫連接池。速度相對(duì)c3p0較快,但因自身存在BUG,Hibernate3已不再提供支持。
C3P0 是一個(gè)開源組織提供的一個(gè)數(shù)據(jù)庫連接池,速度相對(duì)較慢,穩(wěn)定性還可以。hibernate官方推薦使用
Proxool 是sourceforge下的一個(gè)開源項(xiàng)目數(shù)據(jù)庫連接池,有監(jiān)控連接池狀態(tài)的功能,穩(wěn)定性較c3p0差一點(diǎn)
BoneCP 是一個(gè)開源組織提供的數(shù)據(jù)庫連接池,速度快
Druid 是阿里提供的數(shù)據(jù)庫連接池,據(jù)說是集DBCP 、C3P0 、Proxool 優(yōu)點(diǎn)于一身的數(shù)據(jù)庫連接池,但是速度不確定是否有BoneCP快
連接步驟:①導(dǎo)入jar包,②測(cè)試連接代碼,③寫配置文件
Druid是阿里巴巴開源平臺(tái)上一個(gè)數(shù)據(jù)庫連接池實(shí)現(xiàn),它結(jié)合了C3P0、DBCP、Proxool等DB池的優(yōu)點(diǎn),同時(shí)加入了日志監(jiān)控,可以很好的監(jiān)控DB池連接和SQL的執(zhí)行情況,可以說是針對(duì)監(jiān)控而生的DB連接池,**可以說是目前最好的連接池之一。
DRUID
①導(dǎo)包
②測(cè)試連接代碼
③寫配置文件
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); } }
//測(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); } }
看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝您對(duì)億速云的支持。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。