一種基于ApacheTomcat的WEB數據庫開發組件方法【
技術領域:
】[0001]—種基于ApacheTomcat的WEB數據庫開發組件方法主要是涉及計算機領域中的數據存儲技術。【
背景技術:
】[0002]第三代Web數據庫使所有對數據庫的操作(增加、刪除、修改)、信息的查詢和管理都通過統一標準的Internet瀏覽器界面來進行,這對于那些終端用戶來說是極好的方式,也更加適應Internet技術的發展和網絡互連的需要。和許多傳統的數據庫一樣,web數據庫是一種可供用戶訪問的數據倉庫或信息存儲庫,然而web數據庫是一個新的研究領域,與傳統數據庫系統又有許多不同的方面,例如:體系結構不同、訪問方式不同、訪問的用戶不同、客戶端簡化等。正是這些不同,決定了WEB數據庫程序的復雜性。為了解決這種復雜性,各個公司都紛紛推出自己的解決方案,中間件的概念也應運而生。【
發明內容】[0003]通過國家專利檢索沒有發現關于此系統方面的申請資料。[0004]對JDBC進行對象化改進,以期達到如下效果:1)將整個數掘庫連接過程封裝,屏蔽掉其間復雜繁瑣的連接步驟;2)讓封裝后的JDBC連接對象對程序員提供統一的編程接口,使程序員可以使用同樣的函數方法來實現不同的數掘庫操作。[0005]為了實現上述要求的第一項,也就是實現JDBC數據庫連接的封裝,首先將整個JDBC數據庫連接過程封裝入一個叫做DBAceess的類中。按照MVC的設計思想,控制層正好能實現上述要求中的第二項,因此在對象化后的YDBC連接類中,控制層就是為程序員提供的統一編程接口。這樣我們就需要讓這個接口實現MVC模式中控制層的功能。期望最終用戶只需與這個統一編程接口對話即可,而不用理會數據庫連接的具體方法和細節。DBAcccss類中創建一個public方法,叫做DBControl,然后將DBControl方法作為整個DBAcccss類中的控制層。[0006]按照MVC設計模式思想,我們將整個JDBC開發組件分為三層:表示層、控制層和模型層。在DBAccess類我們封裝了控制層和模型層。利用public方法DBControl來實現用戶請求的初步處理和數據分流,利用四個private方法來分別實現用戶不同的數據庫操作請求。另外創建兩個輔助類Const類和Data類來提高整個數掘庫丌發組件的性能。[0007]Const類的實現:另外創建一個Const類,專門用來存儲整個程序所需要的各種常量,將上述各個字符串變量作為Const類的全局變量存儲。當需要連接時,從Const類提取相應字符串變量傳遞給DBAccess類,當系統所選用的數據庫產品更改時,我們只需重新編譯存儲這些參數的Const類即可。[0008]const類的代碼:publicfinalclassConst{publicstaticstringSQLDRIVERNAME=,,org.git.mm.mysql.Driver,,;publicstaticstringSQLURL=”jdbc:mysql://DLMUDXF/TEXT”;publicstaticstringSQLUSERID=”ROOT”;publicstaticstringSQLPASSWORD=””;}其中SQLDRIVERNAME存儲JDBC數據庫連接所需要的數據庫驅動程序名。SQLURL存儲數據庫的地址。SQLUSERID存儲登錄數據庫所用的用戶名。SQLPASSWORD存儲登錄用密碼。當JDBC連接的數據庫系統發生變化時,或者該系統的相關參數發生變化,我們只需修改Const類中相應字段即可。[0009]Data類的實現:Data類是在Hashtable類型基礎上改進得到的,他是一種適于存儲數掘庫查詢結果集的數據類型。因此,在Data類中我們設計了三個主要的私有屬性,用柬存放相關的數據。[0010]PrivateHashtabledata=null;Privateintindex=-1;PrivateVectorcolumnNameVec=null;其中privateHashtabledata就是最終用來存儲數據庫查詢結果集的哈希表。privateimindex是用戶在使用Data對象時所需要的虛擬指針。privateVectorcoIumnNameVec是一個向量,用來存儲數據庫查詢結果集的列名,也就是查詢出末的數掘庫表的字段名。這罩之所以使用Vector向量這種數據結構,主要是考慮到Vecmr向量可以自伸縮的特點。因為在實際使用中,我們查詢的數據庫表的字段數日是小確定的,因此我們需要Vector向量這種靈活的,可以自己伸縮長度的數掘結構來存儲相應的數據庫表字段名。這三個屬性都被設置成private型私有變量,這也是符合面向對象的封裝思想的。用戶如果需要獲得者三個屬性,不能直接讀取他們,而必須通過相對應的函數方法來取得。因此我們在Data類中定義了三個函數方法,專門用來取得相對應的屬性。例如,如果想要取得privateHashtabledata,程序員必須通過getTable方法。GetTable方法的代碼如下:PublicHashtablegettable(){Returndata;}Data類中最重要的一個方法,是publicData(ResultSe!tp—da詛)方法,這也是Data類的初始化函數。其功能是對傳入的ResultSet類型的參數p—data進行數據解構,并存儲到Hashtabledata中。publicDat“)方法的具體代碼如下:publicData(ResultSetp_data){try{this.data=newHashtableO;imfieldCount2p—data.getMetaData0.getCoIumnCountO;columnNameVec=newVector();for(inti=l;i〈=fieldCount;i++){StringcoIumnName5p—data.getMetaData0.getColumnName(i);coIumnNameVec.addElement(colunmName);VectorcolumnValue=newVector();this.data,put(coIumnName,columnValue);)intrecordNum=0:while(pdata,next()){recordNum++;for(intj2I;j〈_fieldCount;j+十){StringcoIumnName2p-data.getMetaData0.getColumnName(j);intcolumnType。p_data.getMetaData0.getColunmType(j);Objectvalue=null;switch(columnType){casejava.sql.Types.TIMESTAMP:casejava.sql.Types.DATE:casejava.sql.Types.TIME:value2p_data.getTimestamp(eolumnName);break;default:StringtempValue5p_data.getString(eolumnName);if(tempValue12null)value=newString(tempValue);break;}if“(vector)this.data,get(eolumnName)).sizeO<recordNum){((Vector)this.data,get(eolumnName)).addElement(value);})}this.data,put(,,data—size,,,newInteger(recordNum));}catch(SQLExcept1nsqlExcept1n){System,out.println(,,Therearesomesqlexcept1n,,);}catch(Except1n1Except1n){System,out.println(,,Therearesome1Except1n,,);))首先Data方法的參數是ResultSet類型的p—data,這樣設計有很大好處。程序員使用Data類型創建Data對象實例的同時,傳遞進來的ResultSet結果集,會被該Data方法自動處理,并存入Data對象實例中。[0011]intfieldCount=p—data.getMetaData0.getColunmCountO;columnNameVec=newVector();for(inti=l;i<_fieldCount;i++){StnngcolumnName=p_data.getMetaData0.getColumnName(i);columnNameVec.addElement(eolumnName);VectorcolumnValue=newVector();this.data,put(eolumnName,columnValue);}上面這段代碼的作用是獲得傳遞進來的ResultSet結果集所包含的字段的個數,并將各字段的名稱存入向量columnNameVec中。與此同時,每一個ResultSet結果集中包含的字段都相對應的創建了一個向量eolunmValue,并將這些向量實例放入data中。也就是說,每一個ResultSet結果集中包含的字段,都對應了一個向量,這些向量是用柬存儲ResultSet結果集中對應字段的所有數據的。直觀的理解,上面每一個向量,實際上對應著獲得的ResultSet結果集中的一列。這樣我們也就明白為什么要使用向量Vector這種數據結構了,這正是因為ResultSet結果集中一列的長度并不一定。也就是說ResultSet結果集的記錄條數并不一定,因此要使用靈活方便的向量Vector類型。之后的intrecordNum用來存儲ResultSet結果集的記錄條數。而再接下來的while(p_data.nextO)循環則是整個Data方法中最關鍵的部分,正是在這個部分中我們實現了從ResultSet類型到Data類型的轉換。while(p_data.nextO)循環當前第1頁1 2