突发灵感加上原来有个需求需要从BLOB字段(本来就是型内容)中直接读取成为串需要java开发人员支持想了想和其求人不如求己
oracle.sql.BLOB相关文档参看(http://www.princeton.edu/~storacle/jdbc8_doc/oracle.sql.BLOB.html)
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 BLOBObject
{
public String ConvertBLOBtoString(oracle.sql.BLOB BlobContent)
{
msgContent= BlobContent.getBytes; //BLOB转换为字节
s; //BLOB临时存储字节
String Str = ""; //返回串
i=1; //循环变量
long BlobLength; //BLOB字段长度
try
{
BlobLength=BlobContent.length; //获取BLOB长度
(msgContent null || BlobLength0) //如果为空返回空值
{
"";
}
//处理BLOB为串
{
/*
while(i
{
s= BlobContent.getBytes(i,1024) ;
i=i+1024;
Str = Str+ String(s,"gb2312";
}
*/
Str = String(BlobContent.getBytes(1,900),"gb2312"+"...."; //简化处理只取前900字节
Str;
}
}
catch(Exception e) //oracle异常捕获
{
e.prStackTrace;
}
Str;
}
}
——然后在Oracle中把这个类导入成为个执行命令
create or replace function ConvertBLOB(blobObject BLOB)
varchar2
as language java name
'MyOracle.BLOB.BLOBObject.ConvertBLOBtoString(oracle.sql.BLOB) java.lang.String';
——执行相应操作
select ConvertBLOB(BLOBField)dbms_lob.getlength(BLOBField)BLOBFieldfrom TableName
以上代码均在PL/SQL developer中开发并调试通过很有意思
最新评论