java能夠調用Oracle的存儲過程,反之oracle也能用java來開發外部存儲過程,這樣java和oracle的相互界限就已經不明確了。
當然關系型數據庫最好做自己應該做的事情而不是大包大攬做所有的非數據庫應該做的事情。
——開發java類
create or replace and compile java source named BLOBObject as
package MyOracle.BLOB; --自己定義的package
import java.io.*; --外部引用到的java包
import oracle.sql.*;
public class BLOBObject
{
public static String ConvertBLOBtoString(oracle.sql.BLOB BlobContent)
{
byte[] msgContent= BlobContent.getBytes(); //BLOB轉換為字節數組
byte[] bytes; //BLOB臨時存儲字節數組
String newStr = ""; //返回字符串
int i=1; //循環變量
long BlobLength; //BLOB字段長度
try
{
BlobLength=BlobContent.length(); //獲取BLOB長度
if (msgContent == null || BlobLength==0) //如果為空,返回空值
{
return "";
}
else //處理BLOB為字符串
{
/*
while(i
{
bytes= BlobContent.getBytes(i,1024) ;
i=i+1024;
newStr = newStr+new String(bytes,"gb2312";
}
*/
newStr = new String(BlobContent.getBytes(1,900),"gb2312"+"...."; //簡化處理,只取前900字節
return newStr;
}
}
catch(Exception e) //oracle異常捕獲
{
e.printStackTrace();
}
return newStr;
}
}
——然后在Oracle中把這個類導入成為一個函數,執行命令
create or replace function ConvertBLOB(blobObject BLOB)
return varchar2
as language java name
'MyOracle.BLOB.BLOBObject.ConvertBLOBtoString(oracle.sql.BLOB) return java.lang.String';
——執行相應的操作
select ConvertBLOB(BLOBField),dbms_lob.getlength(BLOBField),BLOBFieldfrom TableName
以上代碼均在PL/SQL developer中開發并調試通過。
|
新聞熱點
疑難解答
圖片精選