日期:2014-05-20  浏览次数:20976 次

求助高手指导:java从oracle 中读取blob字段转换成字符串后生成了各种字符
java从oracle 中读取blob字段转换成字符串后生成了各种字符,源代码如下:

public static String ConvertBLOBtoString(Statement stmt,String jh,String kgrq,String wjrq,String zd){
String newStr = ""; // 返回字符串
long BlobLength; // BLOB字段长度
byte bytes; // BLOB临时存储字节数组
int i = 1;
try{
ResultSet rs = stmt.executeQuery("SELECT "+zd+" FROM SGZJ_SGXS WHERE JH = '"+jh+"' AND KGRQ = TO_DATE('"+kgrq+"','YY-MM-DD') AND WJRQ = TO_DATE('"+wjrq+"','YY-MM-DD')");
if(rs.next()){
Blob blob =(Blob)rs.getBlob(1);
byte msgContent=blob.getBytes(blob.length(),i);
BlobLength=blob.length();
if (msgContent==null||BlobLength==0){
return "";  
}else{  
while(i<BlobLength){
bytes=blob.getBytes(i,1024); 
i=i+1024; 
newStr=newStr+new String(bytes,"GB2312");          

}
}rs.close();
System.out.println(newStr);
System.out.println(newStr.length());
}catch(UnsupportedEncodingException e) {
e.printStackTrace();
}catch(SQLException e) {
e.printStackTrace();
}finally{
}
  return newStr;
 }


执行的结果如下:
{\rtf1\ansi\ansicpg936\deff0\deflang1033\deflangfe2052{\fonttbl{\f0\fnil\fcharset134 \'cb\'ce\'cc\'e5;}} \viewkind4\uc1\pard\lang2052\f0\fs18\'c9\'bd2-31\'be\'ae\'ce\'bb\'d3\'da\'c4\'cf\'c1\'ba\'ce\'f7\'c7\'f8\'c4\'cf\'b2\'bf\'a3\'ac\'ca\'c7\'b6\'f5\'b6\'fb\'b6\'e0\'cb\'b9\'c5\'e8\'b5\'d8\'d2\'c1\'c9\'c2\'d0\'b1\'c6\'c2\'c9\'cf\'b5\'c4\'d2\'bb\'bf\'da\'b5\'d8\'b9\'d8\'be\'ae\'a3\'ac\'ce\'d2\'b6\'d3\'d3\'da2011\'c4\'ea8\'d4\'c23\'c8\'d5\'d6\'c12011\'c4\'ea8\'d4\'c216\'c8\'d5\'b6\'d4\'b8\'c3\'be\'ae\'bd\'f8\'d0\'d0\'c1\'cb\'cd\'a8\'cf\'b4\'be\'ae\'a3\'ac\'b2\'b9\'bf\'d7\'a1\'a2\'d1\'b9\'c1\'d1\'a3\'ac\'b3\'e9\'bc\'b3\'c5\'c5\'d2\'ba\'c7\'f3\'b2\'fa\'b5\'c8\'b9\'a4\'d7\'f7\'a3\'ac\'c8\'a1\'c8\'ab\'c8\'a1\'d7\'bc\'c1\'cb\'b8\'f7\'cf\'ee\'b5\'d8\'d6\'ca\'d7\'ca\'c1\'cf\'a3\'ac\'ca\'a9\'b9\'a4\'b4\'ef\'b5\'bd\'c1\'cb\'c9\'e8\'bc\'c6\'d2\'aa\'c7\'f3\'ba\'cd\'ca\'d4\'d3\'cd\'c4\'bf\'b5\'c4\'a1\'a3\par } 
我通过c#软件存进去的是word里的文本,结果出来的是这样的。
我通过oracle下载的blob字段也是这个样子的,难道是存进去的就是这个么?
请高手指教,谢谢。
Java Oracle String blob

------解决方案--------------------
    oracle.sql.CLOB clob = (oracle.sql.CLOB) rs1.getClob("xxx");

    BufferedReader in = new BufferedReader(clob
      .getCharacterStream());
    StringWriter out = new StringWriter();
    int c;
    while ((c = in.read()) != -1) {
     out.write(c);
    }
    content = out.toString();
    System.out.println(content);


这样转下