1. 編寫java代碼,後續能夠直接使用java代碼,class文件或者jar包java
2. 將寫好的java代碼導入到oracle數據庫中,有兩種方法:一種是使用loadjava命令;另外一種是在編寫PL/SQL的時候編寫算法
3. 編寫存儲過程、函數 來封裝java代碼,以實現後面對java功能的調用數據庫
4. 調用寫好的存儲過程和oracle函數oracle
有關loadJava的各個參數的意思,能夠使用:loadjava -help 命令來得到詳細幫助。本文中主要用到的參數有-u(用於輸入用戶名及密碼)、-v(用於輸出詳細的反饋信息)、-resolve(對於沒有編譯的Java文件,能夠用resolve來編譯)、-f(這個命令我在例子中沒有用到,它的意思是force,表示無論以前是否已經導入過該Java類,都強制再次導入)。loadjava能夠實現對class文件、jar文件、resource文件、property文件的導入,當導入class文件時,能夠用以下命令:app
loadjava –u username/userpassword –v filename.class函數
當導入Java文件時,能夠用以下命令:測試
loadjava –u username/userpassword –v -resolve filename.javablog
當導入jar文件時,能夠用以下命令:ip
loadjava –u username/userpassword –v -resolve filename.jarget
下面一個類是對32位MD5擴展爲64位MD5的算法類,咱們將在java函數中調用這個類中的方法實現對32位
MD5算法的擴展
//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 –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中直接測試結果