馬剛 孫炳潤(rùn)
摘??要:隨著WEB技術(shù)的發(fā)展和電子商務(wù)時(shí)代的到來(lái),以Java技術(shù)為核心的JSP技術(shù)應(yīng)運(yùn)而生。本文呢介紹了Java中使用的數(shù)據(jù)庫(kù)連接技術(shù)———JDBC,綜述了四種基于JDBC的數(shù)據(jù)庫(kù)訪問(wèn)機(jī)制,并且在Tomcat服務(wù)器上用JavaBean實(shí)現(xiàn)了SQLServer2000的數(shù)據(jù)庫(kù)連接池。
關(guān)鍵詞:JSP;JDBC;連接池;JavaBean
一、引言
JSP將Java作為其腳本語(yǔ)言,在傳統(tǒng)的HTML文件中加入Java程序片段和JSP標(biāo)簽,因此JSP也繼承了Java語(yǔ)言特點(diǎn)。在使用JSP技術(shù)開發(fā)基于數(shù)據(jù)庫(kù)的動(dòng)態(tài)Web應(yīng)用程序中,與數(shù)據(jù)庫(kù)的連接的管理性能會(huì)影響到整個(gè)應(yīng)用程序的可伸縮性。
二、Java中數(shù)據(jù)庫(kù)連接技術(shù)簡(jiǎn)介
JDBC可分為4種類型:
(1)JDBC-ODBC橋
最初的數(shù)據(jù)庫(kù)連接方式是借助各數(shù)據(jù)庫(kù)廠商提供的差異性極大的數(shù)據(jù)庫(kù)驅(qū)動(dòng)接口來(lái)實(shí)現(xiàn)的,因此其實(shí)現(xiàn)非常繁瑣并且通用性差,具有很大的局限性。為此,微軟首先提出了通用的數(shù)據(jù)庫(kù)連接機(jī)制和標(biāo)準(zhǔn)以實(shí)現(xiàn)各種不同關(guān)系型數(shù)據(jù)庫(kù)統(tǒng)一的互聯(lián)規(guī)范,該規(guī)范即為ODBC(開放式數(shù)據(jù)庫(kù)連接)。而JDBC-ODBC橋?qū)嵸|(zhì)上是Java提供的一種以JDBC為介質(zhì),通過(guò)傳統(tǒng)的ODBC驅(qū)動(dòng)程序來(lái)訪問(wèn)數(shù)據(jù)庫(kù)的方法。通過(guò)使用JDBC中連接ODBC驅(qū)動(dòng)的驅(qū)動(dòng)程序,即可實(shí)現(xiàn)這種數(shù)據(jù)庫(kù)連接。該方案需要在本地安裝ODBC類庫(kù)和驅(qū)動(dòng)程序。
(2)Java到本地
APIJDBC-ODBC橋由于采用了一種間接的數(shù)據(jù)庫(kù)驅(qū)動(dòng)方式,因此,效率上打了一定的折扣。一種較為高效的JDBC連接方法是JDBC驅(qū)動(dòng)程序使用Java本地接口直接調(diào)用本地的數(shù)據(jù)庫(kù)API,從而實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的連接和對(duì)數(shù)據(jù)的操縱。該方案也要求在本地安裝連接目標(biāo)數(shù)據(jù)庫(kù)的類庫(kù)。
(3)Java到網(wǎng)絡(luò)協(xié)議
這類JDBC驅(qū)動(dòng)程序是純Java的驅(qū)動(dòng)程序,它通過(guò)一定的網(wǎng)絡(luò)協(xié)議與數(shù)據(jù)庫(kù)服務(wù)器上的JDBC中間件通信。由于該類驅(qū)動(dòng)程序不要求在訪問(wèn)數(shù)據(jù)庫(kù)的Java程序各地都安裝目標(biāo)數(shù)據(jù)庫(kù)的類庫(kù),因此,它是最靈活的JDBC方案,使得程序可以通過(guò)網(wǎng)絡(luò)協(xié)議與不同的數(shù)據(jù)庫(kù)進(jìn)行通信。
(4)Java到數(shù)據(jù)庫(kù)協(xié)議
這類驅(qū)動(dòng)程序也是純Java程序?qū)崿F(xiàn)的,它通過(guò)實(shí)現(xiàn)一定的數(shù)據(jù)庫(kù)協(xié)議直接與數(shù)據(jù)庫(kù)通信。由于該方案直接與數(shù)據(jù)庫(kù)通信,因此,其效率是4種方案中最高的。通常,Java應(yīng)用程序訪問(wèn)數(shù)據(jù)庫(kù)的過(guò)程分為如下4個(gè)步驟:(1)裝載數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序。2)通過(guò)JDBC建立數(shù)據(jù)庫(kù)連接。3)訪問(wèn)數(shù)據(jù)庫(kù),執(zhí)行SQL語(yǔ)句。4)斷開數(shù)據(jù)庫(kù)連接。
三、JDBC數(shù)據(jù)庫(kù)連接池技術(shù)
數(shù)據(jù)庫(kù)連接池最基本的思想就是預(yù)先建立一些連接放置于內(nèi)存對(duì)象中以備使用,當(dāng)程序中需要建立數(shù)據(jù)庫(kù)連接時(shí),只須從內(nèi)存中取一個(gè)來(lái)用而不用新建。使用完畢后只需放回內(nèi)存即可,而連接的建立、斷開都有連接池自身來(lái)管理(見圖1)。
同時(shí)還可以通過(guò)設(shè)置連接池的參數(shù)來(lái)控制連接池中的連接數(shù)、每個(gè)連接的最大使用次數(shù),還可以通過(guò)其自身的管理機(jī)制來(lái)監(jiān)視數(shù)據(jù)庫(kù)連接的數(shù)量、使用情況等,連接池的使用大大提高了程序效率。連接池的基本屬性主要有:連接池中連接數(shù)量下限和上限、一個(gè)連接的最大使用次數(shù)、一個(gè)連接的最長(zhǎng)空閑時(shí)間、同一時(shí)間的最大連接數(shù)。這些屬性定義了連接池與其中的每個(gè)連接的有效狀態(tài)值。連接池的自我管理,實(shí)際上就是通過(guò)定時(shí)對(duì)每個(gè)連接的狀態(tài)、連接的數(shù)量進(jìn)行判斷而進(jìn)行相應(yīng)的操作。當(dāng)前國(guó)內(nèi)的數(shù)據(jù)庫(kù)連接池的解決方案主要是通過(guò)創(chuàng)建封裝DriverManager的包DBConnection,通過(guò)該包來(lái)實(shí)現(xiàn)數(shù)據(jù)庫(kù)連接的復(fù)用管理。自JDBC2.0推出以后,一種優(yōu)于DriverManager解決方案已經(jīng)出現(xiàn),它就是利用JDBC2.0中的DataSource來(lái)實(shí)現(xiàn)數(shù)據(jù)庫(kù)連接池,以替代1.0中提供的DriverManager類。DataSource是一個(gè)由JDBC驅(qū)動(dòng)程序管理的包含數(shù)據(jù)庫(kù)連接信息的數(shù)據(jù)對(duì)象,可以和JNDI(JavaNamingDirectoryInterface)命名服務(wù)協(xié)同工作,一個(gè)數(shù)據(jù)源對(duì)象注冊(cè)到JNDI名字服務(wù)后,應(yīng)用程序就可以從JNDI服務(wù)器上取得該對(duì)象,并使用它和數(shù)據(jù)源建立連接。這樣與連接有關(guān)的信息就可以在DataSource對(duì)象的屬性中修改,無(wú)需改動(dòng)使用這個(gè)數(shù)據(jù)源的應(yīng)用程序,因此增強(qiáng)了應(yīng)用程序的可移植性、可維護(hù)性。
四、連接池的建立和實(shí)現(xiàn)
目前的JDBC驅(qū)動(dòng)中基本都包含了DataSource接口的實(shí)現(xiàn),但不少都沒有包含基于DataSource的數(shù)據(jù)庫(kù)連接池的實(shí)現(xiàn),如SQLServer2000的JDBC驅(qū)動(dòng)中就沒有這種數(shù)據(jù)庫(kù)連接池。但在當(dāng)前的主流應(yīng)用服務(wù)器上都包含了基于DataSource的數(shù)據(jù)庫(kù)連接池的實(shí)現(xiàn)。如:Weblogic、Websphere、Tomcat等。本文以Tomcat7+SQLSERVER2018為平臺(tái)來(lái)研究如何用JavaBean實(shí)現(xiàn)SQLSERVER2000數(shù)據(jù)庫(kù)連接池。
將連接池部分采用JavaBean的形式進(jìn)行實(shí)現(xiàn),這樣不僅頁(yè)面易于維護(hù),而且代碼也得到重用。JavaBean是經(jīng)編譯過(guò)的class文件,源代碼也得到保密。而且將用戶名和密碼封裝在class文件內(nèi)對(duì)數(shù)據(jù)庫(kù)也起到安全保護(hù)作用。
五、結(jié)束語(yǔ)
連接池技術(shù)可以更加高效地連接并操作各種數(shù)據(jù)庫(kù)大大降低了系統(tǒng)開銷,提高了數(shù)據(jù)庫(kù)訪問(wèn)的速度。筆者發(fā)現(xiàn),數(shù)據(jù)庫(kù)連接池技術(shù)可使開發(fā)效率明顯得到提高,代碼維護(hù)代價(jià)大大降低,訪問(wèn)效率也得到顯著提高,使有限的計(jì)算機(jī)系統(tǒng)資源為更多的用戶提供更加安全可靠的服務(wù)。
參考文獻(xiàn)
[1] 李肅義,李洋.在JSP中使用JavaBeans連接數(shù)據(jù)庫(kù)[J].吉林大學(xué)學(xué)報(bào)(信息科學(xué)版),2002,20(3):78-79.
[2] 范新民.基于JSP、JDBC技術(shù)動(dòng)態(tài)訪問(wèn)Web數(shù)據(jù)庫(kù)的實(shí)現(xiàn)方案[J].福建師范大學(xué)學(xué)報(bào)(自然科學(xué)版),2002,18(2):33-35.
[3] 林元元.JDBC?連接?MySQL?數(shù)據(jù)庫(kù)的方法淺析?[J].長(zhǎng)沙通信職業(yè)技術(shù)學(xué)院學(xué)報(bào),2009,(01).
[4] 高偉,李爽,杜瑞慶.基于?JDBC?的?SQL?Server?數(shù)據(jù)庫(kù)訪問(wèn)?[J].福建電腦,2008,(01).
科學(xué)導(dǎo)報(bào)·學(xué)術(shù)2020年36期