Java从Oracle读取Blob显示图片在页面

来源:互联网 发布:mac mini接两个显示器 编辑:程序博客网 时间:2024/05/15 14:41

一。jsp页面

  <image src="/foi/obstacleReport/image" onload="if(this.width>screen.width-1000)this.style.width=screen.width-1000;"/>

二。后台

  1。.得到数据库连接。

  def dbDriver = "oracle.jdbc.driver.OracleDriver";
  def url =  "jdbc:oracle:thinxx

  def username = "foi";
  def password = "foi";
  Connection conn = null;
  Class.forName(dbDriver);
  DriverManager.setLoginTimeout(30);
  conn = DriverManager.getConnection(url, username, password);

  2 。写sql语句

  def query ="""select photo from photo_list where id = 1"""
 

3 。预编译

  byte[] description = "";
  def pstmt = conn.prepareStatement(query);
  ResultSet result = pstmt.executeQuery();
  StringBuffer myStringBuffer = new StringBuffer();
  if (result.next()) {
   java.sql.Blob blob = result.getBlob("photo");
   InputStream inStream = blob.getBinaryStream();
   long nLen = blob.length();
   int nSize = (int) nLen;
   description = new byte[nSize];
   inStream.read(description);
   inStream.close();
   
   description = ChangeImgSize(description, 200, 200);
   if(description!=null){
    OutputStream op = response.getOutputStream();
    op.write(description, 0, description.length);
    op.close();
    op = null;
   }
   response.flushBuffer();
   
  }
  result.close();
  pstmt.close();
  conn.close();
  }
 }

private byte[] ChangeImgSize(byte[] data, int nw, int nh){
     byte[] newdata = null;
     try{
         BufferedImage bis = ImageIO.read(new ByteArrayInputStream(data));
   if(bis!=null){
             int w = bis.getWidth();
             int h = bis.getHeight();
             double sx = (double) nw / w;
             double sy = (double) nh / h;
             AffineTransform transform = new AffineTransform();
             transform.setToScale(sx, sy);
             //AffineTransformOp ato = new AffineTransformOp(transform, null);
             //原始颜色
             //BufferedImage bid = new BufferedImage(nw, nh, BufferedImage.TYPE_3BYTE_BGR);
             //ato.filter(bis, bid);
             //转换成byte字节
             ByteArrayOutputStream baos = new ByteArrayOutputStream();
             ImageIO.write(bis, "jpeg", baos);
             newdata = baos.toByteArray();
   }
     }catch(IOException e){
          e.printStackTrace();
     }
     return newdata;
 }