Oracle資料庫中調用Java類開發儲存體過程、函數的方法

來源:互聯網
上載者:User

標籤:force   cal   3.1   developer   targe   htm   article   load   pl/sql   

Oracle資料庫中調用Java類開發儲存體過程、函數的方法時間:2014年12月24日  瀏覽:5538次

oracle資料庫的開發非常靈活,不僅支援最基本的SQL,而且還提供了專屬的PL/SQL,除此之外,還可以用時下最流行的程式設計語言Java來做開發。隨著對oracle的瞭解越來越多,越來越禁不住oracle的誘惑,oracle技術真的是一門很有趣的學問。之前,我在部落格中總結了挺多有關SQL、PL/SQL的,但是對於oracle資料庫中Java類的調用卻沒有總結,也是因為之前不太會,這會兒總結了一下,特來分享。

1、oracle中調用Java類的基本思路

要在oracle中調用Java類來實現預存程序、函數,我覺的大概的思路是這樣的:

(1)首先編寫Java代碼,可以用自己喜歡的代碼編輯器編輯,編輯好了以後,可以將代碼編譯成.class檔案,也可以打成jar包,也可以啥都不操作,就是一個Java原始碼檔案在那放著。

(2)想辦法將已經寫好的Java代碼匯入到oracle資料庫中,這裡匯入主要有兩種方法,一種是使用loadjava命令,另一種是直接在編寫PL/SQL代碼的時候寫Java代碼,這兩種方法我在下面會詳細總結。

(3)編寫預存程序、函數來封裝Java代碼,以實現後面對Java功能的調用。

(4)準備工作已經做完了,最後就是調用了,調用的方式與PL/SQL完全一樣,沒啥不同的。

2、loadjava命令介紹

在切入正題之前,先簡單介紹下loadjava命令及其用法,loadjava命令有很多的參數,也沒有必要全部都瞭解,loadjava的調用規則如1所示:

圖1:loadjava的調用規則

loadjava命令不是在sql*plus中調用的,而是在cmd視窗中,有關loadJava的各個參數的意思,可以使用:loadjava -help 命令來獲得詳細協助。本文中主要用到的參數有-u(用於輸入使用者名稱及密碼)、-v(用於輸出詳細的反饋資訊)、-resolve(對於沒有編譯的Java檔案,可以用resolve來編譯)、-f(這個命令我在例子中沒有用到,它的意思是force,表示不管之前是否已經匯入過該Java類,都強制再次匯入)。loadjava可以實現對class檔案、jar檔案、resource檔案、property檔案的匯入,當匯入class檔案時,可以用如下命令:

loadjava –u username/userpassword –v filename.class

當匯入Java檔案時,可以用如下命令:

loadjava –u username/userpassword –v -resolve filename.java

當匯入jar檔案時,可以用如下命令:

loadjava –u username/userpassword –v -resolve filename.jar

3、舉例說明oracle調用Java全步驟

例子:一個簡單的需求,用Java代碼實現求圓的面積,圓周率PI為3.14,輸入的參數為圓的半徑R,輸出圓的面積S,要求可以在oracle中用PL/SQL代碼調用該Java類實現求圓的面積的功能。

Step 1:編寫Java代碼,PL/SQL Developer本身雖然支援編寫Java代碼,但是畢竟不是專業的,對Java的工具提供的不是特別好,我喜歡用MyEclipse開發好以後複製過來,下面是我在MyEclipse中開發好的代碼。

// 圓工具類,計算圓的面積public class CircleTools {  // 定義常量PI  public static final double PI = 3.14;  // 計算面積  public static double calcSquare(double r) {    return PI * r * r;  }}

注意在寫Java代碼的時候,為了能夠直接能夠在oracle中被調用,所以這裡在需要調用的方法前要加上public和static。

Step 2:寫好Java代碼,下面就是要將Java匯入到oracle資料庫中,匯入的方法在前文提到過可以用loadJava或者直接寫。如果要用loadJava匯入,先把上面的代碼檔案儲存為CircleTools.java,然後在cmd命令列中進入該目錄下,然後執行如下命令:

loadjava –u username/userpassword –v -resolve CircleTools.java

執行上面的命令就OK了,下面提供另一種方法,就是直接在PL/SQL中寫,寫法如下:

CREATE OR REPLACE AND COMPILE JAVA SOURCE NAMED circletools AS// 圓工具類,計算圓的面積public class CircleTools {  // 定義常量PI  public static final double PI = 3.14;  // 計算面積  public static double calcSquare(double r) {    return PI * r * r;  }}

我的oracle開發工具是PL/SQL Developer,所以我在PL/SQL Developer中執行了上面這段代碼,然後查詢user_objects表,可以發現CircleTools類已經被匯入進了oracle資料庫中,如2所示:

圖2:user_objects表中查詢到CircleTools類

Step 3:編寫預存程序(procedure)或者函數(function)來封裝,以實現以後的調用,一般來說,如果一個Java方法沒有傳回值,那麼就封裝成預存程序,如果有傳回值,就封裝成函數,這裡我只給出一個封裝成函數的例子:

CREATE OR REPLACE FUNCTION calc_square(r IN NUMBER) RETURN NUMBER AS  LANGUAGE JAVA NAME ‘CircleTools.calcSquare(double) return double‘;

Step 4:上面幾步基本上已經實現了全部了,最後一步測試一下,我test了一下calc_square這個函數,結果如3所示:

圖3:測試calc_square函數

Step 5:如果不想用那個Java類了,可以用dropjava命令刪除掉系統中的Java,這個跟loadjava很相似,下面:

圖4:dropjava命令

例如:

dropjava -user username/[email protected] -v javasourcename

注意上面刪除的是Java的source name,不是class name,即對象的OBJECT_TYPE是JAVA SOURCE,不是JAVA CLASS。這個地方我不太確定,不過我直接刪除類名是報錯了,先這樣寫著吧,後面發現錯了,我會糾正的。

在oracle中調用Java source的思路大概就是上面這樣,一想到可以把Java代碼跑在oracle中是不是還是蠻激動的,功能一下子就有擴充了許多。

Oracle資料庫中調用Java類開發儲存體過程、函數的方法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.