周 嵐
(蕪湖信息技術(shù)學(xué)院軟件工程系,安徽蕪湖 241003)
Oracle中基于Java的存儲(chǔ)過(guò)程開(kāi)發(fā)
周 嵐
(蕪湖信息技術(shù)學(xué)院軟件工程系,安徽蕪湖 241003)
存儲(chǔ)過(guò)程是一種數(shù)據(jù)庫(kù)對(duì)象,將執(zhí)行計(jì)劃存儲(chǔ)在數(shù)據(jù)庫(kù)的服務(wù)器中,它的執(zhí)行速度比獨(dú)立執(zhí)行同樣的程序要快。任何一個(gè)設(shè)計(jì)良好的數(shù)據(jù)庫(kù)應(yīng)用程序都應(yīng)該用到存儲(chǔ)過(guò)程。存儲(chǔ)過(guò)程可以使得對(duì)數(shù)據(jù)庫(kù)的管理、顯示關(guān)于數(shù)據(jù)庫(kù)及其用戶信息的工作容易很多。文中詳細(xì)分析了Java存儲(chǔ)過(guò)程的開(kāi)發(fā)步驟。
Java存儲(chǔ)過(guò)程;Oracle9i數(shù)據(jù)庫(kù);Java函數(shù)
存儲(chǔ)過(guò)程是一種數(shù)據(jù)庫(kù)對(duì)象,將執(zhí)行計(jì)劃存儲(chǔ)在數(shù)據(jù)庫(kù)的服務(wù)器中,它的執(zhí)行速度比獨(dú)立執(zhí)行同樣的程序要快。存儲(chǔ)過(guò)程可以使得對(duì)數(shù)據(jù)庫(kù)的管理、顯示關(guān)于數(shù)據(jù)庫(kù)及其用戶信息的工作容易很多。存儲(chǔ)過(guò)程可以包含數(shù)據(jù)流、邏輯以及對(duì)數(shù)據(jù)庫(kù)的查詢。在Oracle9i中應(yīng)用開(kāi)發(fā)人員除了可使用PL/SQL還可以使用Java來(lái)開(kāi)發(fā)他們的業(yè)務(wù)邏輯,并將這個(gè)業(yè)務(wù)邏輯作為存儲(chǔ)過(guò)程、函數(shù)和觸發(fā)程序部署在數(shù)據(jù)庫(kù)中。
當(dāng)調(diào)用Java存儲(chǔ)過(guò)程時(shí),數(shù)據(jù)庫(kù)會(huì)直接運(yùn)行該存儲(chǔ)過(guò)程,無(wú)需進(jìn)行編譯。相對(duì)于SQL語(yǔ)句或PL/SQL塊而言,其執(zhí)行速度更快。
(1)在定義存儲(chǔ)過(guò)程時(shí),要使用其完成單一、相對(duì)集中的任務(wù)。
(2)在定義存儲(chǔ)過(guò)程時(shí),不要定義已經(jīng)由其它特征所提供功能的過(guò)程。例如,不要定義強(qiáng)制數(shù)據(jù)完整性的過(guò)程(使用完整性約束)。
Oracle9i支持四種不同類型的存儲(chǔ)過(guò)程,用PL/SQL或Java,都可以實(shí)現(xiàn)全部四種類型的存儲(chǔ)過(guò)程。這四種存儲(chǔ)過(guò)程類型是:存儲(chǔ)過(guò)程、存儲(chǔ)函數(shù)、數(shù)據(jù)庫(kù)觸發(fā)器和對(duì)象類型方法。
在Oracle9i里,這四種存儲(chǔ)程序類型的每一種,都可以從不同的調(diào)用環(huán)境調(diào)用,這些調(diào)用環(huán)境是:SQL語(yǔ)句或DML語(yǔ)句、頂級(jí)CALL語(yǔ)法、PL/SQL塊、子程序(包)和觸發(fā)器的隱式調(diào)用。
(1)Java存儲(chǔ)過(guò)程的開(kāi)發(fā)步驟:編寫(xiě)Java源代碼、裝載Java代碼及類到Oracle9i數(shù)據(jù)庫(kù)中、生成調(diào)用說(shuō)明和調(diào)用JSP。
要將Java方法轉(zhuǎn)換為Java存儲(chǔ)過(guò)程需要幾個(gè)步驟,包括:用loadjava實(shí)用程序?qū)ava類加載到數(shù)據(jù)庫(kù)中,利用調(diào)用規(guī)范(Call Spec)發(fā)布Java方法,將Java方法、參數(shù)類型和返回類型映射到其SQL的對(duì)應(yīng)部分。
(2)編寫(xiě)Java源代碼
當(dāng)開(kāi)發(fā)Java存儲(chǔ)過(guò)程時(shí),首先應(yīng)該編寫(xiě)Java源代碼。如下所示:
(3)裝載Java代碼及類到Oracle9i數(shù)據(jù)庫(kù)中
在編寫(xiě)了Java源代碼之后,接下來(lái)應(yīng)該將Java代碼及相應(yīng)的Java類裝載到Oracle9i數(shù)據(jù)庫(kù)中。如圖1所示:
裝載Java代碼及類到RDBMS有以下兩種方法:
使用loadjava工具,通過(guò)該工具可以快速裝載Java源代碼(.java)、Java二進(jìn)制代碼(.class)以及Java打包文件(.jar)。
使用CREATE Java、ALTER Java裝載Java代碼。
圖1 Oracle9i中的Java類
(4)生成調(diào)用說(shuō)明
在裝載了Java類之后,接下來(lái)應(yīng)該生成對(duì)public static方法的調(diào)用說(shuō)明,最終完成Java存儲(chǔ)過(guò)程的開(kāi)發(fā)工作。
完成上述步驟之后,就完成了Java存儲(chǔ)過(guò)程的開(kāi)發(fā)工作,然后就可以調(diào)用并執(zhí)行該Java存儲(chǔ)過(guò)程了。
過(guò)程用于執(zhí)行某種操作。需要注意的是,過(guò)程所對(duì)應(yīng)的Java方法返回值必須為空(void)。本節(jié)以創(chuàng)建用于插入、修改和刪除THEACHERS表的JSP為例,說(shuō)明使用Java開(kāi)發(fā)過(guò)程的方法。如圖2所示:
圖2 使用Java開(kāi)發(fā)過(guò)程示例
下面講述完成上述任務(wù)的方法及過(guò)程:
(1)編寫(xiě)Java源代碼
程序清單如下(manipulate_teachers.java):
(3)發(fā)行Java,生成調(diào)用說(shuō)明
在裝載了Java類后,就可以發(fā)行該Java類,并生成調(diào)用其方法的過(guò)程說(shuō)明了。下面是完成該項(xiàng)任務(wù)的方法:
(5)分析
在這我們使用了Java存儲(chǔ)過(guò)程,與PL/SQL相比,使用Java語(yǔ)言開(kāi)發(fā)存儲(chǔ)過(guò)程只被發(fā)送到數(shù)據(jù)庫(kù)一次,相對(duì)于SQL語(yǔ)句或PL/SQL塊而言,其網(wǎng)絡(luò)通信量更小。而且當(dāng)調(diào)用Java存儲(chǔ)過(guò)程時(shí),數(shù)據(jù)庫(kù)會(huì)直接運(yùn)行該存儲(chǔ)過(guò)程,無(wú)需進(jìn)行編譯。相對(duì)于SQL語(yǔ)句或PL/SQL塊而言,它省去了編譯的時(shí)間,因此其執(zhí)行速度更快。
函數(shù)用于返回特定數(shù)據(jù)??赏ㄟ^(guò)創(chuàng)建用于返回教師所教授的課程標(biāo)題,以及課程數(shù)為例,說(shuō)明使用Java開(kāi)發(fā)函數(shù)的方法。如圖3所示:
圖3 使用Java開(kāi)發(fā)函數(shù)示例
任何一個(gè)設(shè)計(jì)良好的數(shù)據(jù)庫(kù)應(yīng)用程序都應(yīng)該用到存儲(chǔ)過(guò)程。存儲(chǔ)過(guò)程可以使得對(duì)數(shù)據(jù)庫(kù)的管理、顯示關(guān)于數(shù)據(jù)庫(kù)及其用戶信息的工作容易很多。存儲(chǔ)過(guò)程可以幫助你在代碼中分離邏輯.Oracle數(shù)據(jù)庫(kù)與Java VM的集成可以創(chuàng)建可移植、功能強(qiáng)大和數(shù)據(jù)庫(kù)無(wú)關(guān)的數(shù)據(jù)邏輯和持續(xù)性邏輯。Java語(yǔ)言具有更強(qiáng)大的運(yùn)算能力,提供了更多的運(yùn)算方法,可以應(yīng)用于更多的數(shù)據(jù)庫(kù)系統(tǒng)(如Sybase、DB2、Informix等等)。Java的存儲(chǔ)過(guò)程可以解決不同數(shù)據(jù)庫(kù)廠商使用各種專有的、且依賴于數(shù)據(jù)庫(kù)的實(shí)現(xiàn)語(yǔ)言的問(wèn)題,利用Java存儲(chǔ)過(guò)程溝通SQL、XML、Java、J2EE和Web服務(wù)。
[1] Kevin Loney,Marlene Theriault,等.Oracle 9iDBA手冊(cè)[M].蔣蕊,王磊,等,譯.北京:機(jī)械工業(yè)出版社,2005.
[2] 丁岳偉,彭敦陸.Java程序設(shè)計(jì)[M].北京:高等教育出版社,2005.
[3] John Carnell,等.Oracle 9iJava程序設(shè)計(jì)—使用PL/SQL和Java的解決方案[M].康博,譯.北京:清華大學(xué)出版社,2002.
[4] 周悅芝.Oracle J2EE應(yīng)用開(kāi)發(fā)[M].北京:清華大學(xué)出版社,2005.
[5] 王洪,朱銳.?dāng)?shù)據(jù)庫(kù)存儲(chǔ)過(guò)程設(shè)計(jì)及應(yīng)用[M].電子信息對(duì)抗技術(shù),2009(2).
責(zé)任編輯:孟云玲
TP311.13
A
1671-8275(2011)01-0004-03
2010-09-08
安徽省青年優(yōu)秀人才基金資助項(xiàng)目“面向IT產(chǎn)業(yè)需求如何培養(yǎng)高職軟件技術(shù)人才”(項(xiàng)目編號(hào):2009SQRZ224)階段性成果。
周嵐(1978-),女,安徽績(jī)溪人,蕪湖信息技術(shù)學(xué)院軟件工程系講師,碩士。