日期:2014-05-16  浏览次数:20421 次

查询BLOB(图片)并通过流方式写入页面
//通过oracle中获取BLOB字段并且将BLOB字段中的图片显示在页面中。(流)
ResultSet rsset = null;
PreparedStatement pstmt = null; 
Connection conn = null; 
try { 
Class.forName("oracle.jdbc.driver.OracleDriver"); 
conn = DriverManager.getConnection 
("jdbc:oracle:thin:@10.1.7.79:1521:tjkf", "yhm", "mm");
String sql = "select FILE_CONTENT from UPLOAD_FILE u where u.ID = ?";
  pstmt = conn.prepareStatement(sql);
  pstmt.setString(1, zdz);
  rsset=pstmt.executeQuery();
  while(rsset.next())
{
   Blob blob=rsset.getBlob(1);
//获取blob字段==转化为流
    InputStream reader=blob.getBinaryStream(); 
   OutputStream writer = null;
try {
         //获取页面输出流,进行页面内容的写出
writer = response.getOutputStream();
} catch (IOException e) {
e.printStackTrace();
}
byte buf[]=new byte[1024];
try {
for(int i=0;(i=reader.read(buf))>0;){
          //将读取的blob字段的流输出到页面中/通过页面输出流
          writer.write(buf,0,i);
    }
} catch (IOException e) {
e.printStackTrace();
}
  }
  } catch (ClassNotFoundException e) { 
   e.printStackTrace(); 
  } catch (SQLException e) { 
   e.printStackTrace(); 
} finally { 
    //关闭流
   try {
if(rsset != null) { 
     rsset.close(); 
rsset = null; 
}
    if(pstmt != null) { 
     pstmt.close(); 
     pstmt = null; 
    } 
    if(conn != null) { 
     conn.close(); 
     conn = null; 
    } 
   } catch (SQLException e) { 
    e.printStackTrace(); 
   } 
  } 
}
//将byte类型数组转化为Char类型数组
private char[] getChars (byte[] bytes) {
      Charset cs = Charset.forName ("UTF-8");
      ByteBuffer bb = ByteBuffer.allocate (bytes.length);
      bb.put (bytes);
      bb.flip ();
      CharBuffer cb = cs.decode (bb);
 
   return cb.array();
}