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

2.1.3 裝載Java代碼及類到Oracle9i數據庫中
在編寫了Java源代碼之后,接下來應該將Java代碼及相應的Java類裝載到Oracle9i數據庫中。如圖1所示:

圖1 Oracle9i中的Java類
裝載Java代碼及類到RDBMS有以下兩種方法:
?使用loadjava工具,通過該工具可以快速裝載 Java 源代碼(.java)、Java 二進制代碼(.class)以及 Java 打包文件(.jar)。
? 使用CREATE Java、ALTER Java裝載 Java代碼。
2.1.4 生成調用說明
在裝載了Java類之后,接下來應該生成對public static方法的調用說明,最終完成Java存儲過程的開發工作。
完成上述步驟之后,就完成了Java存儲過程的開發工作,然后就可以調用并執行該Java存儲過程了。
2.2 使用 Java開發過程
過程用于執行某種操作。需要注意的是,過程所對應的Java方法返回值必須為空(void)。本節以創建用于插入、修改和刪除THEACHERS表的JSP為例,說明使用Java開發過程的方法。如圖2所示:

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

/*建立到數據庫的缺省連接*/

/*構造動態SQL語句*/

/*使用try...catch語句抓取并拋出例外*/try{
/*準備動態SQL語句*/

/*設置動態SQL參數值*/


2.2.2 裝載Java代碼及類到Oracle9i數據庫中
在編寫了Java源代碼之后,就可以將Java對象裝載到Oracle9i數據庫中了。下面是完成這項任務的方法:
//設置環境變量classpath

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

2.2.4 調用JSP
在生成了調用Java方法的過程說明之后,我們就可以調用JSP了。例如://插入一條記錄

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

圖3 使用Java開發函數示例
任何一個設計良好的數據庫應用程序都應該用到存儲過程。存儲過程可以使得對數據庫的管理、顯示關于數據庫及其用戶信息的工作容易很多。存儲過程可以幫助你在代碼中分離邏輯。Oracle數據庫與Java VM的集成可以創建可移植、功能強大和數據庫無關的數據邏輯和持續性邏輯。Java語言具有更強大的運算能力,提供了更多的運算方法,可以應用于更多的數據庫系統(如 Sybase、DB2、Informix 等等)。 Java的存儲過程可以解決不同數據庫廠商使用各種專有的、且依賴于數據庫的實現語言的問題。利用 Java 存儲過程溝通 SQL、XML、Java、J2EE 和Web服務。
[1]Kevin Loney,Marlene Theriault等著,蔣蕊,王磊等譯.Oracle 9i DBA 手冊[M].北京:機械工業出版社,2005.
[2]John Carnell等著,康博譯.Oracle 9i Java程序設計—使用PL/SQL和Java的解決方案[M].北京:清華大學出版社,2002.
[3]丁岳偉,彭敦陸編著.Java程序設計[M].北京:高等教育出版社,2005.
[4]周悅芝著.Oracle J2EE應用開發[M].北京:清華大學出版社,2005.
[5]王洪,朱銳.數據庫存儲過程設計及應用[J].電子信息對抗技術,2009,(2):59-63.
RESEARCH AND DEVELOPMENT OF JAVA STORED PROCEDURES IN ORACLE
ZHOU Lan1KONG Kun-peng2
(1 Wuhu Vocational College of Information Technology,Wuhu Anhui 241003)
(2 Chaohu University,Chaohu Anhui 238000)
Stored procedure is a database object which saves plans in database server, so it runs faster.Any well designed database application should adopt stored procedure, for it makes the management of database, the display of database and users informationeasier.In this paper we analyze in detail the developing steps of stored procedure in Java.
stored procedure in Java; Oracle9i database; function in Java
TP311.52
A
1672-2868(2010)06-0030-04
2010-06-15
安徽省青年優秀人才基金(項目編號:2009SQRZ224)
周嵐(1978-),女,安徽績溪人。蕪湖信息技術學院軟件工程系教師,講師,碩士,研究方向:軟件技術。
責任編輯:陳 侃