String Str="";
long BlobLength; // BLOB字段长度
byte[] bytes; // BLOB临时存储字节数组
try{
if(blob!=null){
int i = 1; // 循环变量
byte[] msgContent = blob.getBytes(); // BLOB转换为字节数组
BlobLength=blob.length(); //获取BLOB长度
if(msgContent == null || BlobLength==0){ //如果为空,返回空值
Str="";
}else{
while(i<BlobLength){ //循环处理字符串转换,每次1024;Oracle字符串限制最大4k
bytes= blob.getBytes(i,1024) ;
i=i+1024;
Str = Str+new String(bytes,"GBK") ;
}
}
}
}catch(Exception e) {
System.err.println("BLOB字段转字符串aq.executeQuery:"+e.getMessage());
}
return Str;
百度到的代码基本为上面的写法,但最近使用中很凑巧的发现一个问题,即while(i<BlobLength)这里需要写成while(i<=BlobLength), 原因是刚好有条记录中Blob字段的长度为4097,那么while循环的时候,刚好第四次i的值为4097,那么就跳出循环了,但Blob字段中的第4097位的字节就不会被读取展示出来了,同理,只要Blob字段的长度刚好是1024*n+1,那么最后一位就不会被读取到了,所以要改成<=,特此记录下~
另,本人新手,使用的oracle字段,所以不知道是数据库方面的字体设置,还是其他什么原因,但是测试发现更新Blob字段的时候,如果不是用GBK字符集的话,数据库中会显示乱码。所以这里取数的时候也是采用GBK来转换!