摘要:大量的計算機軟件的開發離不開數據庫的使用,利用數據庫框架實現數據庫的應用具有多方面的優勢。該文設計和實現了一個微型數據庫應用框架,并將該框架應用于實際的軟件開發過程中,從而驗證了該框架的可用性。該框架適用于小型軟件系統的開發,提高了系統的可擴展性。
關鍵詞:Java數據庫技術;數據庫框架;框架模型;框架實現
中圖分類號:TP311文獻標識碼:A文章編號:1009-3044(2009)36-10184-03
The Research and Development of Database Application Framework on Java
WANG Xiang-zhong
(Software and Art Design Department Nanjing Institute of Railway Technology, Nanjing 210015, China)
Abstract: Many developments of computer software can do without the application of database, it has a lot of advantages in database application using database framework. It designs and realizes a micro-type database application framework, and uses the framework in software development; as a result it confirms that this framework is usable. The framework can apply to the development of small software system, and it can increase the extendibility of the system.
Key words: Java database technology; database framework; framework model; framework realize
隨著人類社會對軟件需求的不斷增加,計算機軟件的開發和應用也越來越廣泛,已經深入到社會生活的各個方面,而其中基于數據庫開發的應用系統也越來越多。研究在軟件開發中數據庫技術的使用和實現尤其必要。
如果每個程序員都通過實現自己的類來使用數據庫,一方面,將增加程序員本身的工作量,增加軟件開發中潛在的錯誤;另一方面,無法降低開發人員對數據庫操作的隨意性,無法實現代碼復用。這些都不符合面向對象的軟件開發思想,為了又好又快地開發我們所需的應用系統,隨著面向對象開發技術的不斷發展,基于框架的軟件開發已經成為一種軟件開發的趨勢,并在實際的軟件開發中得到了廣泛的應用,其中數據庫技術的應用也不例外。
1 框架技術
目前,大量的軟件開發實踐證明,幾乎所有的軟件開發都不是從零開始的,而是在一定的已有代碼、組件、框架的基礎上進行的二次開發,基于框架的軟件開發事實上已經成為業界軟件開發的一種共識,在數據庫應用開發中也是如此。
使用數據庫框架至少有三個方面的優勢。第一,可以隱藏數據庫操作的復雜性,為處理復雜任務提供一套標準的操作程序。第二,可以在開發人員和數據庫之間構建一個經過反復試驗的穩固的中間層,降低風險。第三,可以讓執行任務的方式具有一致性。框架的使用為處理復雜任務提供的標準,如圖1所示。
目前,在Java開發中也使用了大量的數據庫框架,其中最流行的是Hibernate框架。但Hibernate框架更適合于大型軟件系統的開發,并且需要一定是時間的學習。為了在小型軟件系統的開發中也使用數據庫框架,本文實現了一個的數據庫應用框架。
2 Java數據庫技術
JDBC(Java Database Connectivity)是由Sun公司及其合作伙伴共同制定的一種基于JAVA語言訪問數據庫的技術。JDBC提供了訪問數據庫的接口(即標準),而具體實現由數據庫廠商提供,而程序員編程時都是針對接口進行編程的。
JDBC為了使程序員方便地操作數據庫,提供了五個重要的接口,它們分別是Connection、Statement、PreparedStatement、CallableStatement和ResultSet,其相互關系如圖2所示。
其中:
1)Connection:用于保存特定的數據庫連接(會話),在連接上下文中執行SQL語句并返回其結果。
2)Statement:用于執行靜態SQL語句并返回其所生成的結果對象。
3)PreparedStatement:表示預編譯的SQL語句對象。
4)CallableStatement:用于執行SQL存儲過程。
5)ResultSet:表示數據庫結果集的數據表,通常通過執行查詢數據庫的語句生成。
利用JDBC訪問數據庫的一般流程如下:
1)加載數據庫驅動程序;
2)建立與數據庫的連接;
3)執行SQL語句;
4)處理結果;
5)釋放數據庫連接。
3 數據庫框架模型
本文實現的數據庫模型的類圖如圖3所示。
該數據庫框架由四個類和一個接口構成。
1)Parser接口:定義了一個解析器的標準,其中包含如下兩個方法。
public DatabaseConfigInfor parse(String filename);
public DatabaseConfigInfor parse(File file);
parse()方法實現對一個數據庫的配置文件進行解析,并使用DatabaseConfigInfor對象對數據庫的配置信息進行包裝,以便于數據庫配置信息的傳輸。
2)ParserAdapter類:是實現了Parser接口的一個抽象類,對Parser接口中的兩個方法分別進行空實現,即這兩個方法從邏輯上而言,什么事也沒干。將其定義為抽象類是防止程序員創建該類的對象。
3)XMLParser類:承繼于ParserAdapter類的非抽象類,實現對XML配置文件的解析。
4)DatabaseConfigInfor類:是一個JavaBean類,用于存儲數據庫的配置信息。
5)DBConnection類:實現數據庫驅動程序的加載,創建數據庫連接對象,用于對數據庫的操作。
4 數據庫框架實現
本數據庫框架的實現涉及到多個類的實現,由于篇幅的限制,本文僅介紹XML配置文件的解析器ParserAdapter類和DBConnection類的實現過程。
1)ParserAdapter類
public class XMLParser extends ParserAdapter
{
private DatabaseConfigInfor dc=1;
public DatabaseConfigInfor parse(String filename)
{
dc=new DatabaseConfigInfor(); //創建保存數據庫配置信息的對象
try
{ //創建文檔解析器的工廠類對象
DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
//在解析XML文件時,不考慮空白結點
factory.setIgnoringElementContentWhitespace(true);
//創建文檔解析器對象
DocumentBuilder builder=factory.newDocumentBuilder();
//解析XML文件
Document doc=builder.parse(new FileInputStream(filename));
Element element=doc.getDocumentElement();
//提取XML文件中的數據庫配置信息,并存入DatabaseConfigInfor對象
NodeList nodes=element.getChildNodes();
for(int i=0;i { Node currentNode=nodes.item(i); String tagName=currentNode.getNodeName(); String tagValue=currentNode.getFirstChild().getNodeValue(); if(tagName.equals(\"driver\")) { dc.setDriver(tagValue); } else if(tagName.equals(\"url\")) { dc.setUrl(tagValue); } else if(tagName.equals(\"databasename\")) { dc.setDatabasename(tagValue); } else if(tagName.equals(\"user\")) { dc.setUser(tagValue); } else if(tagName.equals(\"password\")) { dc.setPassword(tagValue); }}} catch(ParserConfigurationException pce) {pce.printStackTrace();} catch(FileNotFoundException fnfe) {fnfe.printStackTrace();} catch(org.xml.sax.SAXException saxe) {saxe.printStackTrace();} catch(IOException ioe) {ioe.printStackTrace();} return dc; }} 2)DBConnection類 public class DBConnection { public Connection getConnection(Parser parser) { //利用解析器解析數據庫框架的配置文件 DatabaseConfigInfor dc=parser.parse(\"dataBaseConfiger.xml\"); Connection conn=1; try { Class.forName(dc.getDriver());//加載數據庫驅動程序 //創建數據庫連接對象 conn=DriverManager.getConnection(dc.getUrl()+\";databasename=\"+ dc.getDatabasename(),dc.getUser(),dc.getPassword()); } catch(ClassNotFoundException cnfe) {cnfe.printStackTrace();} catch(SQLException sqle) {sqle.printStackTrace();} return conn; }} 5 結論 該文給出了數據庫框架的設計和開發過程,可以將其應用基于數據庫的應用系統開發,以避免開發者重復編寫操作數據庫的代碼。經過作者的實踐,此數據庫可以運用于Java應用系統的開發。在應用該數據庫框架時,需要編寫相應的DAO(數據訪問對象類),也可以通過繼承ParserAdapter類實現自己新的數據庫配置文件解析器,而不需要修改其他的源代碼,從而實現框架的擴展。 參考文獻: [1] 殷兆麟.UML及其建模工具的使用[M].北京:清華大學出版社,北京交通大學出版社,2008. [2] 何克清,應時,田中茂,等.業務應用軟件框架的一種分析方法[J].軟件學報,2001,12(7):1007-1014. [3] Cay S.Horstmann,Gary Cornell[美] .Java2核心技術卷II,高級特性[M].北京:機械工業出版社,2006. [4] 王國仁.XML數據管理技術[M].北京:電子工業出版社,2007.