本文转载于 李森的百度
在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();
}
%>
以上就是这个实例,希望能对大家有所帮助~~~,更希望大家能留下你的意见或者建议,谢谢!!
在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();
}
%>
以上就是这个实例,希望能对大家有所帮助~~~,更希望大家能留下你的意见或者建议,谢谢!!