java驱动pl sql优点_用PL/SQL和Java开发Oracle8i应用程序
用PL/SQL和Java開發Oracle8 i應用程序
隨著Oracle8i的發布,Oracle 在數據庫里支持了二種主要的編程語言??PL/SQL和Java。今天,Oracle的許多客戶既使用PL/SQL建立數據庫應用程序,也使用Java建立數據庫應用程序。既然存在二種數據庫編程語言,那么就有一個很自然的問題:建立Oracle8i應用程序時,PL/SQL和Java 哪一個更好?
我們來快速地回顧一下,PL/SQL給Oracle數據庫開發人員提供了強大的功能,包括:高性能、易使用、無縫地與SQL結合,以及強壯性?,F在,PL/SQL依舊是一個成熟的開發數據庫應用程序的過程性語言,而且是建立SQL密集型和數據密集型應用程序的理想語言。隨著Oracle8i的推出,Oracle 在數據庫里引入了Java,給這種十分流行的通用語言提供了強壯的、大規模的平臺。
利用企業JavaBean和CORBA,可以用Java開發多層、面向組件的應用程序;也可以用Java開發傳統的數據庫存儲過程。Oracle8i 提供了多種特性,可以簡化用PL/SQL和Java建立應用程序的過程,而且可以容易地把二種語言編寫的應用程序組合起來。
這份白皮書,提供了有關Oracle8i中PL/SQL和Java特性的技術概述,并就如何利用它們建立應用程序提供了實際可行的指導。白皮書分成四個部分:由于許多Oracle 客戶都有現存的PL/SQL應用程序,所以,我們開始時,先描述如何現有的PL/SQL程序與Java組合,擴展現有PL/SQL程序;然后,我們描述二種語言里共有的應用程序編程特性,解釋如何把PL/SQL和Java共同使用;在第三部分,描述怎樣利用PL/SQL和Java 建立應用程序才算(例如:什么時候用PL/SQL最合適,什么時候用Java最合適);最后,我們討論一些真實的例子,實際演示Oracle的客戶們目前在Oracle8i里是如何使用PL/SQL和Java的。
用PL/SQL和JAVA建立應用程序
開始,我們首先看一下擁有PL/SQL應用程序的客戶的場景:客戶們想在服務器里增加新的Java代碼,從而擴充原有的PL/SQL應用程序。有三個特別的問題需要考慮:第一,Oracle8i里支持的主要存儲過程類型是什么,可以用什么途徑調用它們;第二,Java在Oracle8i里如何工作,Java如何同PL/SQL互操作;第三,Oracle8i 服務器如何處理PL/SQL和Java之間的名稱解析。在整個白皮書里, “Java”這個單詞,既指標準的Java,也指SQLJ (Java里的嵌入SQL),只有在明確地表明討論不同概念時,才表示不同的意思。
Oracle8i中存儲過程的類型
Oracle8i支持的存儲過程類型有幾種?Oracle8i 支持四種不同類型的存儲過程??用PL/SQL或Java,都可以實現全部四種類型的存儲過程。這四種存儲過程類型是:
存儲過程??存儲過程允許客戶用任意商業邏輯擴展SQL。客戶用名稱調用存儲過程,可以在SQL、PL/SQL包、以及“”位置上調用存儲過程。
存儲函數??存儲函數實質上與存儲過程相同,不同之處在于存儲函數向調用者返回值??梢杂妹Q調用存儲函數,也可以在SQL、PL/SQL包、以及“”位置上調用存儲函數。
數據庫觸發器??觸發器是與特定的表和視圖關聯的商業規則,修改對表或視圖時,SQL自動調用觸發器。Oracle8i 提供了幾種類型的觸發器:在SQLDML語句執行之前或之后激發的觸發器;在每一行更新之前或之后激發的觸發器;事件觸發器(例如:登錄、退出、DDL語句、數據庫啟動或關閉等的觸發器);替代(instead-of)觸發器。所有這些觸發器類型,都可以用PL/SQL或Java編寫。
對象類型方法?? Oracle8 ? 發行版8.0和Oracle8i提供了用SQL定義復合數據類型的能力。這些對象類型的方法,可以用Java實現,也可用PL/SQL實現。例如,可以用SQL定義一個訂單對象類型purchase_order_t,如下所示:
CREATE TYPE purchase_order_t AS OBJECT (
pono NUMBER,
custref REF customer_info_t,
orderdate DATE,
shipdate DATE,
line_item_list line_item_list_t,
shiptoaddr address_t,
MEMBER FUNCTION
total_value RETURN NUMBER,
) ;
然后實現這個對象類型的方法 …
CREATE OR REPLACE TYPE BODY purchase_order_t AS
MEMBER FUNCTION total_value RETURN NUMBER IS
i INTEGER;
stock stock_info_t;
line_item line_item_t;
total NUMBER := 0;
cost NUMBER;
BEGIN
// 在這里插入具體的PL/SQL代碼或者譯Java存儲過程的調用。
END;
在Oracle 8i 里,這四種存儲程序類型的每一種,都可以從不同的調用環境調用,這些調用環境是:
SQL語句??可以在任何SQL語句內部調用函數。
CALL語法??使用CALL語句,可以在調用過程和函數。CALL是隨Oracle8i新引進的語法。
PL/SQL塊、子程序、包??可以在PL/SQL子程序、包或匿名塊里調用它們。請注意:Java存儲程序自己可以在匿名的BEGIN … END 塊內被調用。
觸發器的隱式調用??最后,PL/SQL或Java存儲過程可以在觸發器執行的時候,隱式地被調用。
把JAVA與現存的PL/SQL程序結合
要想理解如何才能把Java 應用程序和現有的PL/SQL存儲過程結合起來,我們首先要理解開發Java存儲過程的三個步驟:
第一步:編寫Java 存儲過程:第一步是編寫要做成存儲過程的Java程序。可以用標準的Java編寫,也可以用SQLJ編寫?因為存儲過程通常都是SQL密集型的,所以用SQLJ編寫存儲過程,是一個效率較高的方法。
public class Foo {
public static String prependHello(String tail) {
return "Hello " + tail;}}
第二步:步署、發布存儲過程:用Java開發工具編寫完Java程序后,要把它裝載進Oracle8i。要用Oracle提供的loadjava命令行工具,以源文件、二進制文件、.class類文件、Java .jar歸檔文件的形式,把Java程序裝載進Oracle8i中的目標數據庫大綱。Loadjava是一個Java程序,它用Oracle的JDBC驅動程序連接服務器,自動把一組Java程序裝載進服務器。(還可以使用CREATE JAVA這個工具,它是SQL*Plus的SQLDDL命令)
>loadjava -user scott/tiger@oudelsrv-1:5521:ORCL Foo.class
命令執行之后,會把類foo的方法裝入scott的大綱(請參閱第后面有關Java、SQL和PL/SQL名稱的內容,了解命名空間解析的問題)。下一步是,把方法登記到SQL上。這一步為什么是必不可少的呢?如果只用PL/SQL,就沒有必要顯式地把PL/SQL過程登記到SQL上?對SQL來說,每個PL/SQL過程自動就是可見的。反之,在使用Java的時候,所有的Java方法對SQL來說都是不可見的?要讓一個Java方法能夠作為存儲過程,在SQL里調用它,就必須顯式地把它“發布”到SQL當中。Java 類和方法不會自動地發布到數據字典、SQL和PL/SQL里,原因有二:
Java應用程序里的大多數方法,通常是由其它Java程序調用;而且Java到Java的調用,發生在Java虛擬機環境里,沒有必要暴露給SQL。
SQL編譯器需要有關SQL數據類型到Java數據類型如何映射參數的指導,還需要正確重載調用的信息,以便給出與原始實際參數值對應的SQL數據類型。這需要開發人員的干預,所以只有某些Java方法需要在SQL和PL/SQL里調用。
用PL/SQL和Java開發Oracle8i應用程序.doc
下載Word文檔到電腦,方便收藏和打印[全文共2945字]
編輯推薦:
下載Word文檔
總結
以上是生活随笔為你收集整理的java驱动pl sql优点_用PL/SQL和Java开发Oracle8i应用程序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vivado使用入门
- 下一篇: word标题大纲级别_快速按标题层级把W