搜索 | 会员  
用Java和oracle实现BLOB字段的字符串读取
来源: http://www.zxbc.cn/html/20090804/72539.html   作者:  日期:2009-10-31  类别:其它语言  主题:Python  编辑:德仔
java能够调用Oracle的存储过程,反之oracle也能用java来开发外部存储过程,这样java和oracle的相互界限就已经不明确了。 br />
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

 
德仔网尊重行业规范,每篇文章都注明有明确的作者和来源;德仔网的原创文章,请转载时务必注明文章作者和来源:德仔网;
头条那些事
大家在关注
广告那些事
我们的推荐
也许感兴趣的
干货
了解一下吧