常萬軍,馬世霞
(1.貴州大學,貴州 貴陽 552205;2.河南機電高等專科學校,河南 新鄉(xiāng) 453002)
Web程序開發(fā)中的JDBC技術改進研究
常萬軍1,2,馬世霞2
(1.貴州大學,貴州 貴陽 552205;2.河南機電高等??茖W校,河南 新鄉(xiāng) 453002)
文章基于MVC模式,通過建立DBAccess類實現(xiàn)了JDBC對象化改進。利用繼承于改進的Hashtable類的Data類和String[][]類的設計,實現(xiàn)了JDBC易用性的改進。在實現(xiàn)對象化和易用性改進方案的基礎上開發(fā)出的Web系統(tǒng)經(jīng)測試能夠正常運行,很好地說明了改進方案的可行性。
MVC;技術改進;JDBC
隨著網(wǎng)絡技術的不斷發(fā)展,對Web數(shù)據(jù)庫技術的發(fā)展要求越來越高。但是由于在網(wǎng)絡環(huán)境下,Web數(shù)據(jù)庫的體系結構、訪問方式、訪問的用戶以及客戶端簡化等都與傳統(tǒng)數(shù)據(jù)庫有很大的不同,要使Web數(shù)據(jù)庫的應用得到有效提高,需引入中間件這一技術,使得應用程序利可以用中間件共享各種資源,特別是分布式的網(wǎng)絡資源,也使軟件開發(fā)者不必在應用程序間的通信、互操作以及它們的效率、可靠性、容錯性、安全性、完整性等問題上耗費太多精力,提高應用程序開發(fā)的效率。JDBC(Java Data Base Connectivity)是基于中間件平臺的一種數(shù)據(jù)庫訪問技術,他能夠很好的與ODBC(Open DataBase Connectivity)結合,具有可移植性、平臺無關性。[1~4]但是由于JDBC是基于面向過程的思想提供服務的,不符合面向對象的要求,同時其易用性不能使人滿意。本文討論了基于MVC模式的JDBC對象化改進等Web數(shù)據(jù)庫系統(tǒng)開發(fā)技術的改進方案,從而很好地保持了JDBC的優(yōu)點并改進了其在Web系統(tǒng)開發(fā)中的缺點。
MVC 模式(Model-View-Controller),即把一個應用的輸入、處理、輸出流程按照Model、View、Controller的方式進行分離,這樣一個應用被分成三層——模型層、視圖層、控制層。[5,6]視圖(View)代表用戶交互界面,繪制和顯示模型的數(shù)據(jù),提交由控制器提供的數(shù)據(jù)。模型(Model)是業(yè)務流程/狀態(tài)的處理模塊,包括對業(yè)務數(shù)據(jù)的存取、加工、綜合等;維護應用程序的狀態(tài)和數(shù)據(jù),可以接受來自視圖的查詢并做出響應;同時當模型的數(shù)據(jù)發(fā)生變化時,它把變化通知給視圖,視圖根據(jù)模型的變化來更新自己。模型的設計可以說是 MVC最主要的核心??刂疲–ontroller)是基于應用程序的邏輯更新模型,它要告訴程序開發(fā)者,選擇什么樣的模型,選擇什么樣的視圖,可以完成什么樣的用戶請求,控制層自身卻并不做任何的數(shù)據(jù)處理。控制層負責View和Model之間的流程控制,一方面是將用戶界面(View)的操作映射到具體的 Model,以完成具體的業(yè)務邏輯,另一方面是將通過Model處理完的業(yè)務數(shù)據(jù)及時反應到用戶界面(View)上。
1.2.1 基于MVC模式的JDBC對象化的改進
對于程序員來說,JDBC在數(shù)據(jù)庫連接時,整個數(shù)據(jù)庫連接過程并不是面向對象的,而是面向過程的。[7]JDBC每次連接數(shù)據(jù)庫,同一數(shù)據(jù)庫連接流程都需要從頭到尾編譯一次,使得數(shù)據(jù)庫連接過程繁瑣,編程效率低下。[8]另外,由于數(shù)據(jù)庫操作比較復雜,對于不同的數(shù)據(jù)庫操作 JDBC中提供不同的Statemeni方法,這樣加大了編程的工作量,也不符合面向對象的思想。
基于MVC設計思想,對JDBC的連接過程進行了改進。首先,將整個JDBC數(shù)據(jù)庫連接過程封裝入一個叫做DBAccess的類中,利用 DBAccess類定義的對象為程序員提供統(tǒng)一的編程接口;接著在 DBAccess類中創(chuàng)建一個 public方法,即DBControl方法,用DBControl方法作為DBAccess類中的控制層;然后用ExecuteUpdate()方法執(zhí)行Insert、Update、Delete操作,用 ExecuteQuery()方法執(zhí)行 select操作等。這些對數(shù)據(jù)操作所用到的方法的調用過程對于用戶來說是透明的,實現(xiàn)了MVC設計思想中的控制層的功能。
顯然,按照上述方法封裝的DBAccess類中,DBContro1方法起到了控制層的作用。用private函數(shù)來實現(xiàn)的ExecuteUpdate()、ExecuteQuery()等方法則實現(xiàn)了具體的數(shù)據(jù)庫連接等業(yè)務流程。ExecuteUpdate()、ExecuteQuery()等方法就是DBAeeess類中的模型層,對用戶來說是不可用的、透明的。而表示層并不在 DBAccess類中,因為在整個數(shù)據(jù)庫的連接過程中并不需要考慮數(shù)據(jù)庫連接結果最后應該如何使用。這樣,引入 MVC理念對JDBC的對象化進行改進,可以使基于JDBC的Web數(shù)據(jù)庫系統(tǒng)具有良好的可擴展性及靈活性。
1.2.2 JDBC移植性改進
在 Web程序開發(fā)過程中,針對不同的數(shù)據(jù)庫產品,JDBC是使用不同的JDBC數(shù)據(jù)庫驅動程序來實現(xiàn)的;在連接數(shù)據(jù)庫時,JDBC利用String字符串類型的參數(shù),但是對不同的數(shù)據(jù)庫系統(tǒng),字符串參數(shù)需要發(fā)生變化。這種數(shù)據(jù)庫連接方式對數(shù)據(jù)庫系統(tǒng)的依賴性非常強,使得JDBC在可移植性與速度的平衡方面很難令人滿意。
為改變 JDBC聯(lián)結方式對數(shù)據(jù)庫的依賴,創(chuàng)建一個 Const類,用來存儲整個程序所需要的各種常量,并將JDBC數(shù)據(jù)庫接連時所用的全部 string字符串類型的參數(shù)字符串變量作為Const類的全局變量存儲。當JDBC連接數(shù)據(jù)庫時,從Const類提取相應字符串變量傳遞給DBAccess類。
由于 Const類的引入,創(chuàng)建數(shù)據(jù)庫連接所需的字符串參數(shù)存儲在內部文件中,數(shù)據(jù)連接的速度會有很大的改觀。同時又因為各連接參數(shù)沒有存儲在 DBAccess類文件中,很好地保持了JDBC的可移植性。當數(shù)據(jù)庫產品改變時,我們提練并用某種方法改變存儲于Const類中的數(shù)據(jù)庫連接參數(shù),對Const類重新編譯后即快速可順利連接改變后的數(shù)據(jù)庫,實現(xiàn)了可移植性與連接速度的統(tǒng)一。
1.2.3 JDBC返回值改進
JDBC數(shù)據(jù)庫連接操作的返回值類型,是JDBC默認的結果集類Resultset。Resultset類的功能十分強大,包含String、Int、Data等各種常用的數(shù)據(jù)類型。在傳統(tǒng)的JDBC開發(fā)中,Resultset中的數(shù)據(jù)程序員并不能直接使用,往往還需要將其轉化為其他能夠直接使用的數(shù)據(jù)類型。為解決此問題,提出了JDBC返回值的改進方案。
首先,建立Data類。Data類繼承于由Resultset類轉化后的Hashtable類型,這樣當創(chuàng)建JDBC數(shù)據(jù)庫的首次連接時,如果結果集類Resultset中的數(shù)據(jù)較多,利用繼承于Hashtable類的Data類可以實現(xiàn)結果集中數(shù)據(jù)的快速檢索,同時Data類繼承Hashtable類方法的基礎上,又具有特殊的的屬性和方法,可以滿足Web數(shù)據(jù)庫連接開發(fā)的特殊性要求。
接著建立String[][]這一數(shù)據(jù)類型?;赟tring[][]類型的特點,一方面它可以很輕松地將數(shù)據(jù)庫表中的數(shù)據(jù)轉化并存儲于其中,另一方面,String[][]類型中的 String類型數(shù)據(jù)很容易在JSP頁面上得到體現(xiàn),因此,String[][]類的引入很方便地將Resultset中的數(shù)據(jù)轉化為JSP頁面的數(shù)據(jù)。
由此,利用Resultset類型、繼承于改進的Hashtable類型的Data類和String[][]類型,實現(xiàn)了對數(shù)據(jù)庫查詢操作的返回值的改進,使數(shù)據(jù)庫中的數(shù)據(jù)能夠根據(jù)用戶的要求在JSP頁面中得到顯示。
按照MVC設計模式思想,利用上述方法,將Web程序開發(fā)分為表示層、控制層和模型層。在 DBAccess類封裝了控制層和模型層,利用public方法DBControl來實現(xiàn)用戶請求的初步處理和數(shù)據(jù)分流,利用四個private方法來分別實現(xiàn)用戶不同的數(shù)據(jù)庫操作請求,而單獨建立的Const類和Data類更是輔助提高了Web程序開發(fā)的效率和Web程序的性能。
采用JAVA程序設計工具和Mysql數(shù)據(jù)庫系統(tǒng),在實現(xiàn)上述改進方案的基礎上,開發(fā)出一款小型Web系統(tǒng),能夠實現(xiàn)數(shù)據(jù)的編輯、插入、刪除和查詢等功能。依照MVC理念對該Web系統(tǒng)測試,系統(tǒng)也能正常運行。充分驗證了本文提出的技術改進方案的可行性和優(yōu)越性。
基于MVC模式,實現(xiàn)了JDBC對象化改進和JDBC易用性的改進。利用DBAccess類實現(xiàn)了JDBC的對象化改進,利用繼承于 Hashtable類的 Data類和 String[][]類的設計實現(xiàn)了JDBC易用性的改進。本文設計改進方案,不只適用于Web程序系統(tǒng),也可以應用于其他基于 JAVA平臺的軟件系統(tǒng)。此可以很好地用于基于JDBC連接的網(wǎng)絡數(shù)據(jù)庫系統(tǒng)的開發(fā)。
1 梁陳劍、張 威.JDBC3.0數(shù)據(jù)庫開發(fā)與設計[M].北京:北京希望電子出版社,2003.3
2 楊小平.JAVA項目案例導航[M].北京:科學出版社.2003.8
3 陸正武、張志立.JAVA 項目開發(fā)實踐(2)[M].北京:中國鐵道出版社,2005.7
4 李華鷹.Java中間件開發(fā)技術[M].北京:中國水利水電出版社,2005.8
5 陸榮幸、郁 洲等.J2EE平臺上MVC設計模式的研究與實現(xiàn)[J].計算機應用研究,2003.20(3):144~146
6 袁梅冷、黃煙波等.J2EE應用模型中MVC軟件體系結構的研究與應用[J].計算機應用研究,2003.20(3):147~149
7 何成萬、余秋惠.MVC模型2及Struts軟件框架的研究[J].計算機工程,2002(5):274~275
8 宋善德、郭 飛.基于Java的Web數(shù)據(jù)庫的連接池技術的研究[J].計算機工程與應用,2002.38(8):201~203
The study for improving JDBC technique in the development of the Web program
Chang Wanjun,MA Shixia
Based on the MVC model, it accomplishs to improve the objectification of JDBC through the establishment of DBAccess type.Through the designs of String [] [] type and Data type which inheritances from the improvement Hashtable type, it realizes to make JDBC easy.The Web system, designesd base on the program of improving objectification and ease for using of JDBC is able to be proper functioning by the test, which shows us that the program of improving is feasible.
MVC; technique improvement; JDBC
TP311
A
1000-8136(2010)15-0144-02