《Java數(shù)據(jù)庫連接技術的探討與實踐》由會員分享,可在線閱讀,更多相關《Java數(shù)據(jù)庫連接技術的探討與實踐(3頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、Java數(shù)據(jù)庫連接技術的探討與實踐
摘 要:本文主要對JSP與Web數(shù)據(jù)庫連接的方法進行分析比較,并基于Tomcat用JavaBean構建了一個可重用的數(shù)據(jù)庫連接池。同時也討論了在多種異構數(shù)據(jù)庫下,如何進行多數(shù)據(jù)庫的訪問,并分析了使用Java技術下的各種方法進行多種異構數(shù)據(jù)庫下的數(shù)據(jù)交換。
關鍵詞:數(shù)據(jù)庫;JDBC;連接池
1 引言 隨著Web技術的發(fā)展和電子商務時代的到來,人們希望建立能夠根據(jù)需求生成頁面、提供用戶交互、提供后臺數(shù)據(jù)庫處理等服務的動態(tài)網(wǎng)站。在此需求下,以Java技術為核心的JSP技術應運而生。在使用JSP技術開發(fā)基于數(shù)據(jù)庫的動態(tài)Web應用程序
2、中,與數(shù)據(jù)庫的交互已成為一個重要組成部分。與數(shù)據(jù)庫的交互過程中,數(shù)據(jù)庫連接是一種重要的資源,數(shù)據(jù)庫連接的管理性能會影響到整個應用程序的可伸縮性和健壯性?,F(xiàn)在的各種數(shù)據(jù)庫應用,由于技術、歷史等因素,往往在一個大的部門中并存有多個應用系統(tǒng)。這些應用系統(tǒng)可能分散于不同的網(wǎng)絡節(jié)點、基于不同的操作平臺、使用不同的數(shù)據(jù)庫管理系統(tǒng),且各子系統(tǒng)封閉運行,自成一體,這樣給不同部門的信息資源共享帶來困難。如何在不改變原來系統(tǒng)的內部信息的前提下,完成不同數(shù)據(jù)庫系統(tǒng)間的數(shù)據(jù)訪問和交換是值得研究的問題。 近年來,隨著Internet/Intranet建網(wǎng)技術的飛速發(fā)展和在世界范圍內的迅速普及,計算機應用程序已從傳統(tǒng)的桌
3、面應用轉到Web應用。基于B/S架構的三層開發(fā)模式逐漸取代C/S架構的開發(fā)模式,成為開發(fā)企業(yè)級應用和電子商務普遍采用的技術。在Web應用開發(fā)的早期,主要使用的技術是CGI、ASP、PHP等。之后,Sun公司推出了基于Java語言的servlet+Jsp+JavaBean技術。相比傳統(tǒng)的開發(fā)技術,它具有跨平臺、安全、有效、可移植等特性,這使其更便于使用和開發(fā)。 2 Java中傳統(tǒng)的數(shù)據(jù)庫連接技術 在Java語言中,JDBC是應用程序與數(shù)據(jù)庫溝通的橋梁,JDBC是一種“開放”的方案,它為數(shù)據(jù)庫應用開發(fā)人員與數(shù)據(jù)庫前臺工具開發(fā)人員提供了一種標準的應用程序設計接口,使開發(fā)人員可以用純Java語言編
4、寫完整的數(shù)據(jù)庫應用程序。JDBC提供兩種API,分別是面向開發(fā)人員的API和面向底層的JDBC驅動程序API,底層主要通過直接的JDBC驅動和JDBC-ODBC橋驅動實現(xiàn)與數(shù)據(jù)庫的連接。一般來說,JDBC提供了一種基準.據(jù)此可以構建更高級的工具和接口,使數(shù)據(jù)庫開發(fā)人員能夠編寫數(shù)據(jù)庫應用程序。 傳統(tǒng)的基于JDBC的數(shù)據(jù)庫訪問方式一般有四種:JDBC—ODBC橋接驅動程序、本地 API部分Java驅動程序、數(shù)據(jù)庫中間件的純Java驅動程序、純Java驅動程序。 2.1 JDBC—ODBC橋接驅動程序 這類驅動將JDBC API作為到另一個數(shù)據(jù)訪問API的映射來實現(xiàn)。這類驅動程序通常依賴本地
5、庫,可移植性受到限制。JDBC—ODBC橋是將JDBC操作轉換為ODBC操作來實現(xiàn)JDBC操作,ODBC是目前應用最為廣泛的數(shù)據(jù)庫訪問API,因此通過JDBC—ODBC橋幾乎可以連接任何一種數(shù)據(jù)庫,但是需要客戶端預裝ODBC驅動和配置ODBC數(shù)據(jù)源。執(zhí)行效率低,跨平臺性差,常用于Windows平臺下。 2.2 本地API部分Java驅動程序 這類驅動把對JDBC的調用轉換成本地的API調用,通過數(shù)據(jù)庫請求把結果返回給JDBC驅動器,JDBC驅動器再將結果格式轉化為JDBC標準形式,并將結果返回給客戶端。這種驅動執(zhí)行效率比第一種有所提高,但仍然需要在客戶端加載數(shù)據(jù)庫廠商提供的代碼庫。 2.3
6、 數(shù)據(jù)庫中間件的純Java驅動程序 這種驅動程序將JDBC調用翻譯成與數(shù)據(jù)庫無關的網(wǎng)絡協(xié)議,利用中間件將客戶端連接到不同類型的數(shù)據(jù)庫系統(tǒng)。使用這種驅動程序不需要在客戶端安裝其他軟件,并且能訪問多種數(shù)據(jù)庫。因此,這種驅動程序是與平臺無關的,并且與用戶訪問的數(shù)據(jù)庫無關。特別適合在多層結構應用軟件體系結構中使用。 2.4 純Java驅動程序 這類驅動也是完全由Java實現(xiàn)的,不需要加載任何軟件或驅動,也不需要任何中介軟件,直接把JDBC調用轉換為符合相關數(shù)據(jù)庫系統(tǒng)規(guī)范的請求,與數(shù)據(jù)庫服務器通信。這種驅動的執(zhí)行效率是非常高,與平臺無關,但與特定的數(shù)據(jù)庫有關。 利用JDBC訪問數(shù)據(jù)庫的過程主
7、要有以下四步:①裝載數(shù)據(jù)庫驅動程序。②訪問數(shù)據(jù)庫,執(zhí)行SQL語句。③處理數(shù)據(jù)庫返回結果。④斷開數(shù)據(jù)庫連接。 JDBC作為一種數(shù)據(jù)庫訪問技術,具有簡單易用的優(yōu)點。但使用這種模式進行Web應用程序開發(fā),存在很多問題:首先,每一次Web請求都要建立一次數(shù)據(jù)庫連接。建立連接是一個費時的活動,每次都得花費0.05s~1s的時間,而且系統(tǒng)還要分配內存資源。這個時間對于一次或幾次數(shù)據(jù)庫操作,或許感覺不出系統(tǒng)有多大的開銷。可是對于現(xiàn)在的Web應用,尤其是大型電子商務網(wǎng)站,同時有幾百人甚至幾千人在線是很正常的事。在這種情況下,頻繁的進行數(shù)據(jù)庫連接操作勢必占用很多的系統(tǒng)資源,網(wǎng)站的響應速度必定下降,嚴重的甚至
8、會造成服務器的崩潰。其次,對于每一次數(shù)據(jù)庫連接,使用完后都得斷開。否則,如果程序出現(xiàn)異常而未能關閉,將會導致數(shù)據(jù)庫系統(tǒng)中的內存泄漏,最終將不得不重啟數(shù)據(jù)庫。還有,這種開發(fā)不能控制被創(chuàng)建的連接對象數(shù),系統(tǒng)資源會被毫無顧及的分配出去,如連接過多,也可能導致內存泄漏,服務器崩潰。 3 數(shù)據(jù)庫連接池技術 3.1 數(shù)據(jù)庫連接池的基本原理 為解決上述問題,可以采用數(shù)據(jù)庫連接池技術。數(shù)據(jù)庫連接池的基本思想就是為數(shù)據(jù)庫連接建立一個“緩沖池”。預先在緩沖池中放入一定數(shù)量的連接,當需要建立數(shù)據(jù)庫連接時,只需從“緩沖池”中取出一個,使用完畢之后再放回去。我們可以通過設定連接池最大連接數(shù)來防止系統(tǒng)無盡的與數(shù)據(jù)庫連
9、接。更為重要的是我們可以通過連接池的管理機制監(jiān)視數(shù)據(jù)庫的連接的數(shù)量與使用情況,為系統(tǒng)開發(fā)測試及性能調整提供依據(jù)。 3.2 用JavaBean實現(xiàn)連接池的訪問 目前的JDBC驅動中基本都包含了DataSource接口的實現(xiàn),但不少都沒有包含基于DataSource的數(shù)據(jù)庫連接池的實現(xiàn),如SQLServer 2000的JDBC驅動中就沒有這種數(shù)據(jù)庫連接池。但在當前的主流應用服務器上都包含了基于DataSource的數(shù)據(jù)庫連接池的實現(xiàn)。如:Weblogic、Websphere、Tomcat等。本文以Tomcat5.5+Sql Server 2000為平臺來研究如何用JavaBean實現(xiàn)Sql S
10、erver 2000數(shù)據(jù)庫連接池。 首先將Sql Server 2000的JDBC的驅動文件(jar)放到Tomcat的common/lib目錄下,然后配置Tomcat。在Tomcat的serverv.xml和content.xml中配置如下示例代碼: 4 多數(shù)據(jù)庫系統(tǒng)的Java解決方案 眾所周知,Java技術是全新的編程技術,它具有平臺無關性、面向對象、安全、高性能、分布式,多線程等特點,使Java成為當前最為類型的編程語言和平臺。對于多數(shù)據(jù)庫系統(tǒng)聯(lián)合訪問和數(shù)據(jù)交換,使用Java技術可以解決不同的操作系統(tǒng)和不同的數(shù)據(jù)庫管理系統(tǒng)之間的數(shù)據(jù)處理。 4.1 使用Java Bean技術實
11、現(xiàn)多數(shù)據(jù)庫的訪問 對于基于Web的多數(shù)據(jù)庫訪問,Java Bean技術可以提供一個比較強大、靈活的解決方案。首先構造多個Java Bean,在這些模型組件里,我們要處理數(shù)據(jù)庫的連接、定義,查找、插入、刪除操作等方法,并要實現(xiàn)多線程,然后構造編寫調用Java Bean的Servlet,這樣可以實現(xiàn)對多數(shù)據(jù)庫的訪問。Java Bean的結構如下: public class DatabaseConnectBean { 定義數(shù)據(jù)庫連接的成員; 定義連接的方法{ } } 在Servlet中調用Java Bean的過程為: public class UsedatabaseBea
12、n extends HttpServlet{ public void doGet(httpServletRequest req,HttpServletResponse resp) throws ServletException,IOException{ …… } public void doPost(httpServletRequest req,HttpServletResponse resp) throws ServletException,IOException{//創(chuàng)建Java Bean的對象 DatabaseConnectBean conBean=new DatabaseCon
13、nectBean(……); }} 從上述的過程和語句我們可以發(fā)現(xiàn),使用Servlet技術可以訪問各種不同類型的數(shù)據(jù)庫,但是使用Servlet技術下的Java Bean技術要保證數(shù)據(jù)庫數(shù)據(jù)的一致性,應在Java Bean中我們可以使用Java的線程技術中的同步等方法來實現(xiàn)對數(shù)據(jù)庫的連接、操作,但這樣將加大程序員的編程實現(xiàn)。所以使用Servlet技術下的Java Bean能同時對多個數(shù)據(jù)庫實體的訪問,但實現(xiàn)起來不方便。 4.2 使用EJB技術實現(xiàn)多數(shù)據(jù)庫的訪問 對于多數(shù)據(jù)庫訪問,EJB技術可以提供一個比較強大、靈活的解決方案。首先構造多個會話Bean,在這些模型組件里,我們要處理數(shù)據(jù)庫的連接
14、、定義,查找、插入、刪除操作等方法,然后創(chuàng)建和部署EJB,這樣可以實現(xiàn)對多數(shù)據(jù)庫的訪問。會話Bean的結構如下: public class DatabaseConnectSessionBean implements javax.ejb.SessionBean{ public int checkUserLogin(String userid,String password) throw NameingException,SQLException { …… //得到初始上下文 InitialContext ic=new InitialContext(); //獲得數(shù)據(jù)源 Da
15、taSource ds=(DataSource) ic.lookup(數(shù)據(jù)庫JDNI名字); //建立數(shù)據(jù)庫連接 Connection conn=null; try{ conn ds.getConnection(數(shù)據(jù)庫用戶名,數(shù)據(jù)庫用戶密碼); //進行數(shù)據(jù)庫數(shù)據(jù)的操作 } }} 從上述的過程和語句我們可以發(fā)現(xiàn),使用EJB技術可以訪問各種不同類型的數(shù)據(jù)庫,而且支持數(shù)據(jù)庫的“事務”的機制,這樣使對數(shù)據(jù)的處理能夠保證數(shù)據(jù)的一致性。所以使用EJB技術能實現(xiàn)對多個數(shù)據(jù)庫的訪問,而且安全性、持續(xù)、事物、并行性和資源的管理由容器來管理,這樣使編程具有簡單性。 5 結束
16、語 在使用JDBC進行與數(shù)據(jù)庫有關的應用開發(fā)中,數(shù)據(jù)庫連接的管理是一個難點。很多時候,連接的混亂管理所造成的系統(tǒng)資源開銷過大成為制約大型企業(yè)級應用效率的瓶頸。對于眾多用戶訪問的Web應用,采用數(shù)據(jù)庫連接技術的系統(tǒng)在效率和穩(wěn)定性上比采用傳統(tǒng)的其他方式的系統(tǒng)要好很多。本文闡述了使用JDBC訪問數(shù)據(jù)庫的技術?討論了基于連接池技術的數(shù)據(jù)庫連接管理的關鍵問題并給出了一個實現(xiàn)模型。文章所給出的是連接池管理程序的一種基本模式,為提高系統(tǒng)的整體性能,在此基礎上還可以進行很多有意義的擴展。 EJB技術是解決異構數(shù)據(jù)庫環(huán)境下的多數(shù)據(jù)庫信息處理一種有效的方法。它不但可以解決數(shù)據(jù)庫異構的問題,更是解決操作系統(tǒng)異構的最有效的方法。這樣可以達到不同信息資源的共享及信息的綜合統(tǒng)計查詢,這也是企事業(yè)單位迫切要解決的實際問題。我們認為EJB技術能更好的解決異構數(shù)據(jù)庫環(huán)境下的電子商務和電子政務方面的信息交換問題。 參考文獻: 【1】崔瑩峰,王洪.數(shù)據(jù)庫連接池技術及其在Web系統(tǒng)開發(fā)中的應用.鐵路計算機應用,2005(02) 【2】周彩蘭,陳才賢.基于Java的Web數(shù)據(jù)庫連接池高效管理策略.武漢理工大學學報,2004(05) 【3】羅榮,唐學兵;基于JDBC的數(shù)據(jù)庫連接池的設計與實現(xiàn).計算機工程,2004(09)