打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Blog 图片
在页面中使用图片在应用中是不可缺少的。很多时候我们都是把文件直接放在本地的文件系统上,这样就可以直接在页面中显示图片信息。现在我介绍的是如何在将保存在数据库中的图像信息检索出来并显示在页面中。所用的是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就行了。
简要的说完了,希望能对大家有点儿帮助。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
oracle中操作BLOB
欢迎光临 - 琳婕小筑-老猫的理想 - 通过JDBC操作ORACLE数据库实例详解 -
JDBC小知识点
oracle中如何取出BLOB类型的值
通过JDBC操纵Oracle数据库LOB字段的分析
用jspsmartupload进行上传下载(数据库)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服