oracleblob:用Java和oracle实现BLOB字段的字符串读取

阅读了个帖子“有没有可能写出比Oracle更快外部存储过程”(http://www.itpub.net/thread-1117461-1-1.html)

突发灵感加上原来有个需求需要从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中开发并调试通过很有意思

Tags:  oracleclobblob oracle中blob的写入 javaoracleblob oracleblob

延伸阅读

最新评论

发表评论