周 嵐
(蕪湖信息技術學院軟件工程系,安徽蕪湖 241003)
Oracle中基于Java的存儲過程開發
周 嵐
(蕪湖信息技術學院軟件工程系,安徽蕪湖 241003)
存儲過程是一種數據庫對象,將執行計劃存儲在數據庫的服務器中,它的執行速度比獨立執行同樣的程序要快。任何一個設計良好的數據庫應用程序都應該用到存儲過程。存儲過程可以使得對數據庫的管理、顯示關于數據庫及其用戶信息的工作容易很多。文中詳細分析了Java存儲過程的開發步驟。
Java存儲過程;Oracle9i數據庫;Java函數
存儲過程是一種數據庫對象,將執行計劃存儲在數據庫的服務器中,它的執行速度比獨立執行同樣的程序要快。存儲過程可以使得對數據庫的管理、顯示關于數據庫及其用戶信息的工作容易很多。存儲過程可以包含數據流、邏輯以及對數據庫的查詢。在Oracle9i中應用開發人員除了可使用PL/SQL還可以使用Java來開發他們的業務邏輯,并將這個業務邏輯作為存儲過程、函數和觸發程序部署在數據庫中。
當調用Java存儲過程時,數據庫會直接運行該存儲過程,無需進行編譯。相對于SQL語句或PL/SQL塊而言,其執行速度更快。
(1)在定義存儲過程時,要使用其完成單一、相對集中的任務。
(2)在定義存儲過程時,不要定義已經由其它特征所提供功能的過程。例如,不要定義強制數據完整性的過程(使用完整性約束)。
Oracle9i支持四種不同類型的存儲過程,用PL/SQL或Java,都可以實現全部四種類型的存儲過程。這四種存儲過程類型是:存儲過程、存儲函數、數據庫觸發器和對象類型方法。
在Oracle9i里,這四種存儲程序類型的每一種,都可以從不同的調用環境調用,這些調用環境是:SQL語句或DML語句、頂級CALL語法、PL/SQL塊、子程序(包)和觸發器的隱式調用。
(1)Java存儲過程的開發步驟:編寫Java源代碼、裝載Java代碼及類到Oracle9i數據庫中、生成調用說明和調用JSP。
要將Java方法轉換為Java存儲過程需要幾個步驟,包括:用loadjava實用程序將Java類加載到數據庫中,利用調用規范(Call Spec)發布Java方法,將Java方法、參數類型和返回類型映射到其SQL的對應部分。
(2)編寫Java源代碼
當開發Java存儲過程時,首先應該編寫Java源代碼。如下所示:

(3)裝載Java代碼及類到Oracle9i數據庫中
在編寫了Java源代碼之后,接下來應該將Java代碼及相應的Java類裝載到Oracle9i數據庫中。如圖1所示:
裝載Java代碼及類到RDBMS有以下兩種方法:
使用loadjava工具,通過該工具可以快速裝載Java源代碼(.java)、Java二進制代碼(.class)以及Java打包文件(.jar)。
使用CREATE Java、ALTER Java裝載Java代碼。

圖1 Oracle9i中的Java類
(4)生成調用說明
在裝載了Java類之后,接下來應該生成對public static方法的調用說明,最終完成Java存儲過程的開發工作。
完成上述步驟之后,就完成了Java存儲過程的開發工作,然后就可以調用并執行該Java存儲過程了。
過程用于執行某種操作。需要注意的是,過程所對應的Java方法返回值必須為空(void)。本節以創建用于插入、修改和刪除THEACHERS表的JSP為例,說明使用Java開發過程的方法。如圖2所示:

圖2 使用Java開發過程示例
下面講述完成上述任務的方法及過程:
(1)編寫Java源代碼
程序清單如下(manipulate_teachers.java):



(3)發行Java,生成調用說明
在裝載了Java類后,就可以發行該Java類,并生成調用其方法的過程說明了。下面是完成該項任務的方法:

(5)分析
在這我們使用了Java存儲過程,與PL/SQL相比,使用Java語言開發存儲過程只被發送到數據庫一次,相對于SQL語句或PL/SQL塊而言,其網絡通信量更小。而且當調用Java存儲過程時,數據庫會直接運行該存儲過程,無需進行編譯。相對于SQL語句或PL/SQL塊而言,它省去了編譯的時間,因此其執行速度更快。
函數用于返回特定數據。可通過創建用于返回教師所教授的課程標題,以及課程數為例,說明使用Java開發函數的方法。如圖3所示:

圖3 使用Java開發函數示例
任何一個設計良好的數據庫應用程序都應該用到存儲過程。存儲過程可以使得對數據庫的管理、顯示關于數據庫及其用戶信息的工作容易很多。存儲過程可以幫助你在代碼中分離邏輯.Oracle數據庫與Java VM的集成可以創建可移植、功能強大和數據庫無關的數據邏輯和持續性邏輯。Java語言具有更強大的運算能力,提供了更多的運算方法,可以應用于更多的數據庫系統(如Sybase、DB2、Informix等等)。Java的存儲過程可以解決不同數據庫廠商使用各種專有的、且依賴于數據庫的實現語言的問題,利用Java存儲過程溝通SQL、XML、Java、J2EE和Web服務。
[1] Kevin Loney,Marlene Theriault,等.Oracle 9iDBA手冊[M].蔣蕊,王磊,等,譯.北京:機械工業出版社,2005.
[2] 丁岳偉,彭敦陸.Java程序設計[M].北京:高等教育出版社,2005.
[3] John Carnell,等.Oracle 9iJava程序設計—使用PL/SQL和Java的解決方案[M].康博,譯.北京:清華大學出版社,2002.
[4] 周悅芝.Oracle J2EE應用開發[M].北京:清華大學出版社,2005.
[5] 王洪,朱銳.數據庫存儲過程設計及應用[M].電子信息對抗技術,2009(2).
責任編輯:孟云玲
TP311.13
A
1671-8275(2011)01-0004-03
2010-09-08
安徽省青年優秀人才基金資助項目“面向IT產業需求如何培養高職軟件技術人才”(項目編號:2009SQRZ224)階段性成果。
周嵐(1978-),女,安徽績溪人,蕪湖信息技術學院軟件工程系講師,碩士。