java中如何读取ORACLE中BLOB字段存储的图片

本文转载于 李森的百度

在java中想要读取BLOB字段中图片主要解决办法就是将其写入到java流中,下面就贴上前段我自己项目中的一个例子,希望能对大家有所帮助~~~

          1。首先,oracle中有一张表t_wlsgry,其中有一个photo字段,数据类型blob,主要用于存储图片或照片之类的信息。

         2。其次,用java代码读取这个blob字段的,将其写入到流里,再放进一个字节数据中,代码如下:

/**
**********************************************************************
** Copyright (C) 2009, 上海SunGate公司   All rights reserved.              
**                                                                  
** 文 件 包: app.jxgl.utils                                         
** 文件名称: QueryPhoto.java                                       
** 当前版本:1.0                                                      
** 作    者:李森                                                      
** 完成日期:2009-5-12
**********************************************************************
**/


package app.jxgl.utils;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import common.utils.DataSourceFactory;


public class QueryPhoto {
Connection conn =null;
String sql = "";
public byte[] GetImgByteById(int id){
   byte[] data = null;
   try {
    conn = DataSourceFactory.getFactory().getConnection();  
    sql = "select id,zp from t_wlsgry where id ="+id;
   
    Statement stat = conn.createStatement();
    ResultSet res = stat.executeQuery(sql);
   
    if(res.next()) {
     // 获取BLOB字段'zp'照片信息
     java.sql.Blob blob = res.getBlob("zp");
     InputStream inStream = blob.getBinaryStream();
     try {

                    long nLen = blob.length();

                    int nSize = (int) nLen;

                    data = new byte[nSize];

                    inStream.read(data);

                    inStream.close();

                } catch (IOException e) {

                    System.out.println("获取图片数据失败,原因:" + e.getMessage());

                }
    }
   
    return data;
   
   }catch(SQLException e) {
    e.printStackTrace();
   } catch (Exception e) {
    // TODO 自动生成 catch 块
    e.printStackTrace();
   }finally {
          try {
     conn.close();
    } catch (SQLException e) {
     // TODO 自动生成 catch 块
     e.printStackTrace();
    }
   }
   return data;
}

}
           3。创建一个显示图片的JSP页面,代码如下:

<%@ page contentType="text/html; charset=GBK"%>

<%@ page language="java"%>

<%
String baseUrl = request.getContextPath();

String id = request.getParameter("id");
String imgsrc = baseUrl+"/app/jxgl/displayPhoto.jsp?zpid="+id;
%>

<html:html>
<head>
<html:base />
<title>外来施工单位人员信息管理</title>

</head>

<body οnlοad="init();">
<html:form action="/app/openAppDoc" method="post">

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

   <TR>
    <TD width="15%" rowspan="5" valign="top" align="right"></TD>
      <TD rowspan="5" align="center">
      <iframe name="resultframe" id="resultframe" src="<%=imgsrc %>" marginwidth=1 marginheight=1 frameborder=0 width="100" height="115" scrolling="no"></iframe>
      </TD>
   </TR>

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

            4。displayPhoto.jsp 用来调用第二步的java代码,得到那个字节数组,再转换成输出流,显示图片,代码如下:

<%@ page language="java" contentType="text/html;;charset=gbk" %>

<jsp:useBean id="QueryPhoto" scope="page" class="app.jxgl.utils.QueryPhoto" />
<%
    response.setContentType("image/jpeg");
    
byte[] data = null;

    int strid = Integer.parseInt(request.getParameter("zpid"));
    
    if(strid >= 1){

        //获取图片的byte数据

        data = QueryPhoto.GetImgByteById(strid);

        ServletOutputStream outputStream = response.getOutputStream();       

        outputStream.write(data, 0, data.length);

        outputStream.close();

        outputStream = null;

        response.flushBuffer();

        //清除输出流,防止释放时被捕获异常

        out.clear();

        out = pageContext.pushBody();

    }

%>

            以上就是这个实例,希望能对大家有所帮助~~~,更希望大家能留下你的意见或者建议,谢谢!!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值