`
tntxia
  • 浏览: 1488522 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

jsp中获取数据库中BLOB中的图片信息

阅读更多
在页面中使用图片在应用中是不可缺少的。很多时候我们都是把文件直接放在本地的文件系统上,这样就可以直接在页面中显示图片信息。现在我介绍的是如何在将保存在数据库中的图像信息检索出来并显示在页面中。所用的是oralce数据库的blob存放图片信息。
要显示图片首先在数据库中必须要有图片存放。第一步我们应该建立一张表。表结构如下:TEST_BLOB(id varchar2(20), blobcol BLOB)
第二步我们就必须将数据倒入到数据库中
编译运行下面的代码:
import java.io.*;
import java.sql.*;
import oracle.jdbc.OracleResultSet;
import oracle.sql.*;

public class TestOracle
{
String username,password;
Connection conn = null;
Statement stmt = null;

{
username="***";
password="***";
try
{
    Class.forName("oracle.jdbc.driver.OracleDriver");
    conn=DriverManager.getConnection("jdbc:oracle:thin:@10.150.6.160:1521:dbwind72",username,password);
    stmt=conn.createStatement();
}
catch(Exception ex)
{
System.out.println(ex);
}
}
public void blobInsert(String infile) throws Exception
{

boolean defaultCommit = conn.getAutoCommit();
conn.setAutoCommit(false);

try 
{
System.out.println("try start");
stmt.executeUpdate("INSERT INTO test_blob VALUES('111',EMPTY_BLOB())");
System.out.println("stmt.executeUpdate");
//conn.commit();
ResultSet rs = stmt.executeQuery("SELECT BLOBCOL FROM TEST_BLOB WHERE ID='111' FOR UPDATE");
System.out.println("stmt.executeQuery");
while (rs.next()) 
{
oracle.sql.BLOB blob = (oracle.sql.BLOB)rs.getBlob("BLOBCOL");
System.out.println("rs.getBlob");
BufferedOutputStream out = new BufferedOutputStream(blob.getBinaryOutputStream());
System.out.println("out stream create");
BufferedInputStream   in = new BufferedInputStream(new FileInputStream(new File(infile)));
System.out.println("Create new input file");
int c;
while ((c=in.read())!=-1) 
{
out.write(c);
}
in.close();
out.close();
}


conn.commit();
}
catch (Exception ex) 
{
System.out.println("blobInsert's exception");
conn.rollback();
throw ex;
}

conn.setAutoCommit(defaultCommit);
}

public static void main(String[] args)
{
TestOracle test = new TestOracle();
try
{
test.blobInsert("r:\\onjava_logo.jpg");
}
catch(Exception ex)
{
System.out.println("main's test.blobInsert() Exception"+ex);
}

}
}

这样就把你的R盘下面的onjava_logo.jpg保存到了数据库中。注意:BLOB型的数据必须先插入一个空值然后UPDATE,不能直接往里面插值。

好了,准备工作基本完成,现在开始我们的主题。我在这里直接用了一个jsp文件传送从数据库中检索出来的图片信息。jsp文件代码如下:
//myimage.jsp
<%@ page contentType="image/jpeg" %>

<%@ page import="java.awt.image.*,java.sql.*,com.sun.image.codec.jpeg.*,java.util.*,javax.imageio.*,java.io.*"
%>

<%

// Create image
String username,password,url;
Connection conn = null;
Statement stmt = null;
BufferedInputStream inputimage=null;
username="***";
password="***";
url ="jdbc:oracle:thin:@10.150.6.160:1521:dbwind72";
Class.forName("oracle.jdbc.driver.OracleDriver");
conn=DriverManager.getConnection(url,username,password);
stmt=conn.createStatement();

boolean defaultCommit = conn.getAutoCommit();
conn.setAutoCommit(false);

try {

ResultSet rs = stmt.executeQuery("SELECT * FROM TEST_BLOB WHERE ID='111'");

while (rs.next()) {
oracle.sql.BLOB blob = (oracle.sql.BLOB)rs.getBlob("BLOBCOL");
inputimage = new BufferedInputStream(blob.getBinaryStream());
}
} catch (Exception ex) {
System.out.println("blobRead()'s exception"+ex);
conn.rollback();
throw ex;
}
conn.setAutoCommit(defaultCommit);


// Send back image
BufferedImage image = null;
try{
image = ImageIO.read(inputimage);
}catch(IOException e){
System.out.println(e);
}
ServletOutputStream sos = response.getOutputStream();
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(sos);
encoder.encode(image);
inputimage.close();
/*/**/
%> 
这里我用到了com.sun.image.codec.jpeg包中的JPEGImageEncoder来构造图片。首先从数据库中检索到这个BLOB保存的数据。inputimage = new BufferedInputStream(blob.getBinaryStream());然后包装成一个BufferedInputStream。之后用这个BufferedInputStream构造一个BufferedImage:image = ImageIO.read(inputimage);剩下的事情就好办了,encode就行了。
简要的说完了,希望能对大家有点儿帮助。
分享到:
评论

相关推荐

    从mysql数据库中批量下载Blob图片到本地

    语言Java,数据库mysql 批量获取Blob图片下载到本地,同时设置本地保存位置

    KindEditor应用实例——“轻量级”(删掉了上传图片的功能)

    本工程旨在演示如何在java Web中使用KindEditor、如何使用Servlet获取到该文本编辑域的值以及如何从数据库中取出值并在jsp页面中显示出来。 说明:本工程中的KindEditor删掉了上传图片的功能,所以是一个“轻量级”...

    KindEditor应用实例——“重量级”(保留了上传图片的功能)

    本工程旨在演示如何在java Web中使用KindEditor、如何使用Servlet获取到该文本编辑域的值以及如何从数据库中取出值并在jsp页面中显示出来。 说明:本工程中的KindEditor保留了上传图片的功能,所以是一个“重量级”...

    ssh(structs,spring,hibernate)框架中的上传下载

    BlobByteArrayType使用从sessionFactory获取的Lob操作句柄lobHandler将byte[]的数据保存到Blob数据库字段中。这样,我们就再没有必要通过硬编码的方式,先insert然后再update来完成Blob类型数据的持久化,这个原来难...

    java jdk实列宝典 光盘源代码

    读写Blob数据,blob数据常以二进制形式存储比较大的文件数据,如图片、视频文件等,本文介绍如何往数据库中读写blob数据,BlobData.java; 使用ResultSet更新数据库,UpdateWithResultSet.java; 使用RowSet,....

    Spring.3.x企业应用开发实战(完整版).part2

    11.3 BLOB/CLOB类型数据的操作 11.3.1 如何获取本地数据连接 11.3.2 相关的操作接口 11.3.3 插入Lob类型的数据 11.3.4 以块数据方式读取Lob数据 11.3.5 以流数据方式读取Lob数据 11.4 自增键和行集 11.4.1 自增键的...

    Spring3.x企业应用开发实战(完整版) part1

    11.3 BLOB/CLOB类型数据的操作 11.3.1 如何获取本地数据连接 11.3.2 相关的操作接口 11.3.3 插入Lob类型的数据 11.3.4 以块数据方式读取Lob数据 11.3.5 以流数据方式读取Lob数据 11.4 自增键和行集 11.4.1 自增键的...

    Spring中文帮助文档

    处理BLOB 和 CLOB对象 11.7.3. 在IN语句中传入一组参数值 11.7.4. 处理复杂类型的存储过程调用 12. 使用ORM工具进行数据访问 12.1. 简介 12.2. Hibernate 12.2.1. 资源管理 12.2.2. 在Spring容器中创建 ...

    ARCH4系统开发指南

    2.6.3 在jsp页面中翻译代码 18 2.7 如何使用取单号服务 18 2.7.1 配置文件 19 2.7.2 取单号使用方式 19 2.8 如何使用Hibernate操作Informix数据库 20 2.8.1 实现对LOB数据对象的支持 20 2.8.1.1 配置...

    Java语言基础下载

    显示错误信息的标记 673 其他HTML标记 673 模板标记 673 内容总结 676 独立实践 676 第三十四章:Hibernate基础 677 学习目标 677 Hibernate简介 678 建立简单的Hibernate应用 678 通过 Hibernate API 操纵数据库 ...

    Java JDK实例宝典

    1 获取文件的属性信息 7. 2 列出指定目录下的文件 7. 3 创建文件和目录 7. 4 删除文件和目录 7. 5 移动文件和目录 7. 6 复制文件和目录 7. 7 一个简单的文件搜索器 7. 8 读文件 7....

    Spring API

    处理BLOB 和 CLOB对象 11.7.3. 在IN语句中传入一组参数值 11.7.4. 处理复杂类型的存储过程调用 12. 使用ORM工具进行数据访问 12.1. 简介 12.2. Hibernate 12.2.1. 资源管理 12.2.2. 在Spring容器中创建 ...

Global site tag (gtag.js) - Google Analytics