当前位置:  技术问答>java相关

请教啦,如何把数据库中blob字段存储的图片在jsp页面中显示出来?

    来源: 互联网  发布时间:2015-10-02

    本文导语:  找了一些相关资料看了一下,初学的理解不一定对,请指教。 大体的思路是把图片以二进制流的方式存到blob字段中。这一步调试成功。我现在不知道如何把已存的图片显示在jsp页面上。现在用一种我认为比较笨的办...

找了一些相关资料看了一下,初学的理解不一定对,请指教。
大体的思路是把图片以二进制流的方式存到blob字段中。这一步调试成功。我现在不知道如何把已存的图片显示在jsp页面上。现在用一种我认为比较笨的办法可以实现。就是从blob字段中读出这个图片的信息,生成一个新的图片,保存在服务器的相关目录下面,然后用页面的从该目录下面找到该图片显示出来。
但是这样要专门设一个目录存放图片,占用磁盘空间;图片多了以后还有重名的问题;所有图片放在一起也不容易管理不好分类。感觉很麻烦。
我的想法看能不能直接从数据库中读出图片信息然后直接类似于out.println(picture);这样显示在页面上,而不保存到硬盘的实际目录下。
请各位出出主意看如何实现?用什么办法?如果可以请给出范例代码。分数可以再加,欢迎指教,多谢。

|
假如是一个GIF图片
JSP中

//在yourServlet后面可以跟参数
在yourServlet中

从数据库读出二进制流,象out中写
在最前面

response.setContentType("image/gif");

|
package newhua;
import java.io.*;
import java.util.*;
import java.sql.*;

import java.text.*;
import oracle.sql.*;
import oracle.jdbc.driver.*;
/**
 * 

Title: 


 * 

Description: 


 * 

Copyright: Copyright (c) 2002


 * 

Company: 


 * @author unascribed
 * @version 1.0
 */

public class writeBean {
  private String sample = "";
  //Access sample property
  public String getSample() {
    return sample;
  }
  //Access sample property
  public void setSample(String newValue) {
    if (newValue!=null) {
      sample = newValue;
    }
  }
  
  private String filename = "";
  //Access sample property
  public String getFilename() {
    return filename;
  }
  //Access sample property
  public void setFilename(String newValue) {
    if (newValue!=null) {
      filename = newValue;
    }
  }
  

  public  void gwrite() throws SQLException,IOException
  {
   
    PreparedStatement stmt = null;
    ResultSet rs =  null;
    InputStream fin = null;
    OutputStream fout = null;
    Connection conn=null;
    try{
    
    newhua.dbbean  db=new newhua.dbbean();
    db.InitDatabase();
    conn =db.conn;
    //conn.setAutoCommit(false);
    System.out.println(sample);
    System.out.println(filename);
    //String filename;
    //
    //filename="c:/tomcat/webapps/nw/lsdoc/"+sample+".sxw"; 
    String mysql= "select word from tmanuscript where glidenumber='"+sample+"' for update";
    System.out.println(mysql);  
    stmt=conn.prepareStatement(mysql);
    //stmt.setString(1,sample);
    rs=stmt.executeQuery() ;
    //System.out.println();
    if(rs.next()) {
System.out.println(sample);
System.out.println(filename);
BLOB blob = ((OracleResultSet)rs).getBLOB("word");
fout = blob.getBinaryOutputStream();
File f = new File(filename);
fin = new FileInputStream(f);
byte[] buffer = new byte[blob.getBufferSize()];
int bytesRead = 0;
while((bytesRead = fin.read(buffer)) != -1) 
{
fout.write(buffer, 0, bytesRead);
System.out.println(bytesRead);
}

blob = null;
f = null;
buffer = null;
fin.close();
fout.close();
conn.commit();
}


  }
  catch(Exception ex)
    {
ex.printStackTrace();

 }



finally {
try {



fin = null;
fout = null;
rs = null;
conn = null;
stmt = null;
}
                        catch(Exception e) {
e.printStackTrace();
}
                        }


}

public void gread() throws SQLException,IOException
{
Connection conn = null;
PreparedStatement stmt = null;
InputStream in = null;
OutputStream out = null;
BLOB blob = null;
ResultSet rs = null;
try {
newhua.dbbean  db=new newhua.dbbean();
     db.InitDatabase();
     conn =db.conn;
     //String filename;
     //filename="c:/tomcat/webapps/nw/lsdoc/o_"+sample+".sxw"; 
             String mysql="Select word FROM tmanuscript WHERE glidenumber ='"+sample+"' ";
System.out.println(mysql);

stmt = conn.prepareStatement(mysql);
//stmt.setString(1,"67");
rs = stmt.executeQuery();
if(rs.next()) {
blob = ((OracleResultSet)rs).getBLOB("word");

in = blob.getBinaryStream();
out = new FileOutputStream(filename);
int bufferSize = blob.getBufferSize();
byte[] buffer = new byte[bufferSize];
int bytesRead = 0;
while ((bytesRead = in.read(buffer)) != -1) {
out.write(buffer, 0, bytesRead);
System.out.println(bytesRead);
}
                        stmt.clearParameters();
buffer = null;
in.close();
out.close();
conn.commit();
}
}

catch(Exception e) {
e.printStackTrace();

}

finally {
try {



in = null;
blob = null;
rs = null;
out = null;
conn = null;
stmt = null;
}
catch(Exception e) {

}
}

  }
  
}



jsp:






发文--保存



















    
 
 

您可能感兴趣的文章:

  • sk_buff中重复字段的区别及data数据字段请教
  • 请教进程观察工具top所显示的各字段的意义
  • ****请教关于oracle中date型字段的显示问题。谢谢!!!**
  • [请教]如何join命令将两个文件连接(当进行连接判断的字段是数值类型)
  • 请教:关于linux输入子系统事件字段设置的问题
  • 请教用java从properties文件中读取属性字段的方法?
  • 新手请教在EJB的主键中,我想定位到一个字符型的字段,那么hashCode,与equals应该怎么写呢??谢谢
  • 请教关于存储系统的整体方案
  • 请教:如何选购NAS网络存储器?做视频服务器的存储用。急!!!
  • 请教客户端信息存储
  • motif 存储 png 图像问题请教
  • 请教各位大侠,在windows环境下的mysql 存储过程、视图在linux下是否都能运行?
  • 请教一个关于PROC中调用存储过程的问题
  • 请教一个JDBC调用SQL Server 存储过程的问题
  • 各位大侠,请教一个LINUX存储管理的问题,在页换出时系统要锁住正在被换出的进程,若系统不锁住该进程,会发生什么状况?
  • 请教各位:linux下数百万个文件夹,处理提高存储速度?
  • 请教一个关于在JSP中调用DB2中存储过程中的游标的问题?
  • 用Serializable实现的对象可以用流的形式存储在磁盘上,可再生,以后可以再取出来,请教!!!送分!!!
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 请教,请教,这个问题是为什么????
  • 请教本地硬盘安装问题请教本地硬盘安装问题
  • ■请教■请教redhat最基本的问题!
  • 请教一个 shell 问题,我用下面这个 shell 语句总是失败,请教
  • 高分请教,各位大侠,请教一个问题,理论高手请进??谢谢
  • 请教Linux下pgadmin3-1.0.2的编译和安装!!高分请教!
  • 各位大虾,请教装了REDHAT9操作系统后,启动时无法引导到LINUX,请教该如何解决啊
  • 请教,请教,,,一定要看!!一定要看!!
  • 请教高手,小弟打印width=1500,height=600(A3纸)的Applet,在预览中是该区域是黑的,打印出来也是黑的,请教高手解决一下
  • :请教高手,小弟打印width=1500,height=600(A3纸)的Applet,在预览中是该区域是黑的,打印出来也是黑的,请教高手解决一下
  • 请教象我这样的硬盘应如何安装Linux,我昨天试装了,但有问题。(老问题了,也看了前面的帖子,但还是来请教,请多指教)
  • 请教这种循环的执行过程
  • 请教两个redhat9问题
  • 请教如何在指定目录下查找包含指定文字的文件
  • 请教局域网中如何通过ip地址得到主机名
  • 请教kdevelop的问题
  • 请教linux 下的adsl拨号问题.
  • 请教,如何用虚拟订机安装liux
  • 【请教】LINUX 下SNMP的MIB开发
  • 请教一个opengl的问题


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3