Oracle調用Java類開發的預存程序、函數的方法

來源:互聯網
上載者:User

標籤:實現   pass   compile   有關   通過   pre   png   編譯   結果   

oracle調用java類的基本步驟

1. 編寫java代碼,後續可以直接使用java代碼,class檔案或者jar包

2. 將寫好的java代碼匯入到oracle資料庫中,有兩種方法:一種是使用loadjava命令;另一種是在編寫PL/SQL的時候編寫

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

4. 調用寫好的預存程序和oracle函數


loadjava命令介紹

有關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


執行個體:使用oracle調用java全步驟

下面一個類是對32位MD5擴充為64位MD5的演算法類,我們將在java函數中調用這個類中的方法實現對32位

MD5演算法的擴充

步驟一:編寫java代碼:(注意參數寫完整類名)

//create or replace and compile java source named mac32tomac64 as

public class Mac32ToMac64 {

    public static byte[] hex2byte(java.lang.String hex)

            throws Exception {

        if (hex.length() % 2 != 0) {

            throw new Exception();

        }

        char[] arr = hex.toCharArray();

        byte[] b = new byte[hex.length() / 2];

        for (int i = 0, j = 0, l = hex.length(); i < l; i++, j++) {

            java.lang.String swap = "" + arr[i++] + arr[i];

            int byteint = java.lang.Integer.parseInt(swap, 16) & 0xFF;

            b[j] = new java.lang.Integer(byteint).byteValue();

        }

        return b;

    }

    public static java.lang.String byte2hex(byte[] b) {

        java.lang.StringBuffer hs = new java.lang.StringBuffer();

        java.lang.String stmp;

        for (int i = 0; i < b.length; i++) {

            stmp = java.lang.Integer.toHexString(b[i] & 0xFF).toUpperCase();

            if (stmp.length() == 1) {

                hs.append("0").append(stmp);

            } else {

                hs.append(stmp);

            }

        }

        return hs.toString();

    }

    public static byte[] lengthen(byte[] byteArray) {

        byte[] result = new byte[byteArray.length * 2];

        for (int i = 0; i < byteArray.length; i++) {

            result[2 * i] = byteArray[i];

            int value = (byteArray[i] + byteArray[i == byteArray.length - 1 ? 0 : i + 1]) & 0xFF;

            result[2 * i + 1] = new java.lang.Integer(value).byteValue();

        }

        return result;

    }

    public static java.lang.String to64Mac(java.lang.String req32Mac)

            throws Exception {

        byte[] bytes = hex2byte(req32Mac);

        if (bytes.length == 16) {

            return byte2hex(lengthen(bytes));

        } else {

            throw new Exception("");

        }

    }

}

步驟二:使用loadjava命令將java匯入到orale資料庫中,鍵入密碼後就會有匯入資訊了
loadjava –u username –v -resolve Mac32ToMac64 .java
亦可以通過以下語句驗證是否匯入成功

select * from user_objects u where u.OBJECT_NAME=‘Mac32ToMac64‘


步驟三:編寫預存程序或者函數,以實現以後的調用,如果一個Java方法沒有傳回值,那麼就封裝成預存程序,如果有傳回值,就封裝成函數,這裡是封裝成函數的例子,預存程序類似,不再敖述。這裡varchar對應的java String類型必須寫完整類名,否則會報錯

CREATE OR REPLACE FUNCTION to64mac(r IN VARCHAR2) RETURN VARCHAR2 AS


  LANGUAGE JAVA NAME ‘Mac32ToMac64.to64Mac(java.lang.String) return String‘;

可以在PL/SQL中直接測試結果

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.