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

高分求救:java显示blob图象

    来源: 互联网  发布时间:2017-04-26

    本文导语:  try{ String strSQL="select PHOTO_ORIG from EXC_GETBACK_CONTECT where "+ "REQUIRE_ID='"+strSEQ+"' and ACK_ID='"+strData[0]+"' and "+"CITIZEN_ID='"+strData[1]+"' and NAME='"+strData[2]+"' "; PreparedStatement   stmt = dbConn.prepareCall(strSQL); ResultSet rs=stmt.e...

try{
String strSQL="select PHOTO_ORIG from EXC_GETBACK_CONTECT where "+
"REQUIRE_ID='"+strSEQ+"' and ACK_ID='"+strData[0]+"' and "+"CITIZEN_ID='"+strData[1]+"' and NAME='"+strData[2]+"' ";
PreparedStatement   stmt = dbConn.prepareCall(strSQL);
ResultSet rs=stmt.executeQuery();
while (rs.next()){
 Blob blob = rs.getBlob("PHOTO_ORIG");
 byte[] b = blob.getBytes(1,(int)(blob.length()));
 ImageIcon image=new ImageIcon(b);
 lblPIC.setIcon(image);
}
rs.close();
stmt.close();
}
catch(Exception ex){}
我是这样从oracle里读数据的。可是如果图片是小的gif文件,就可以顺利的读出来,换成jpg就不可以。用system.out.println(image)可以打印出读jpg文件时的一些类似二进制的数据。
如果我把从数据库里读出的blob (jpg)文件写到文件里,这个图片文件就是正常的了。我们现在这个项目要在java图形界面写把这个图片显示出来。
请多多指教。帮忙。
如果分不够,我还可以多给,要多少分都可以。

|
从数据库中读取并生成图片的Servlet 
(文/邵望)
大体思路 
1)创建ServletOutputStream对象out,用于以字节流的方式输出图像 
2)查询数据库,用getBinaryStream方法返回InputStream对象in 
3)创建byte数组用作缓冲,将in读入buf[],再由out输出 

注:下面的例程中数据库连接用了ConnectionPool,以及参数的获得进行了预处理 

package net.seasky.music; 

import javax.servlet.*; 
import javax.servlet.http.*; 
import java.io.*; 
import java.util.*; 
import java.sql.*; 
import net.seasky.util.*; 
import net.seasky.database.DbConnectionManager; 

public class CoverServlet extends HttpServlet { 
private static final String CONTENT_TYPE = "image/gif"; 
public void init(ServletConfig config) throws ServletException { 
super.init(config); 


public void doGet(HttpServletRequest request, HttpServletResponse response 
) throws ServletException, IOException { 
response.setContentType(CONTENT_TYPE); 
int albumID; 
ServletOutputStream out = response.getOutputStream(); 
try { 
albumID = ParamManager.getIntParameter(request,"albumID",0); 

catch (Exception e) { 
response.sendRedirect("../ErroePage.jsp"); 
return; 

try { 
InputStream in=this.getCover(albumID); 
int len; 
byte buf[]=new byte[1024]; 
while ((len=in.read(buf,0,1024))!=-1) { 
out.write(buf,0,len); 


catch (IOException ioe) { 
ioe.printStackTrace() ; 



private InputStream getCover(int albumID) { 
InputStream in=null; 
Connection cn = null; 
PreparedStatement pst = null; 
try { 
cn=DbConnectionManager.getConnection(); 
cn.setCatalog("music"); 
pst=cn.prepareStatement("SELECT img FROM cover where ID =?"); 
pst.setInt(1,albumID); 
ResultSet rs=pst.executeQuery(); 
rs.next() ; 
in=rs.getBinaryStream("img"); 

catch (SQLException sqle) { 
System.err.println("Error in CoverServlet : getCover()-" + sqle); 
sqle.printStackTrace() ; 

finally { 
try { 
pst.close() ; 
cn.close() ; 

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


return in; 


public void destroy() { 



附:
http://www.code-labs.com/project/projectinfo.php?id=44
http://www.yesky.com/20000927/118356.shtml

|
你把写到文件后的那个文件(out.jpg)与你写进去的文件比较一下,看看大小、内容是否一样。如果不一样,说明写入程序可能有问题。

如果你愿意,可以试着将你的读和写的源程序发给我,我也许能帮你查查。
我的电子邮件是里littlebird800225@hotmail.com

|
只要能保证blob的数据正确,那生成的文件扩展名不会有影响的.
ImageIcon是支持gif和jpeg的。

>>>>>>>>
现在的问题是,读非常小的GIF就可以显示出来,而JPG不行。
那么大一些的gif能正常显示吗?

JLabel lblTest = new JLabel("test");
Image img = Toolkit.getDefaultToolkit().getImage("d:/top.jpg");
ImageIcon icon = new ImageIcon(img);
lblTest.setIcon(icon);
我试了一下,不管是jpg,还是gif都没有问题,也和文件大小无关

你试一试用RandomAccessFile来生成jpg文件


也许问题是出在
byte[] b = blob.getBytes(1,(int)(blob.length()));
这里,b的数据不完全正确

|
xiaofenguser(风雨)强调的是个流的操作,建议楼主区blob使用oracle提供的BLOB来进行操作。BLOB也提供流的操作。

|
应该是不能显示的啊,你写入的是GIF,但是写到的确实JPG文件,格式不一样的。你用uedit打开你写的JPG文件,看看是不是FF D8开头,FF D9结尾!

另外GUI程序没怎么写过,不过我觉得xiaofenguser(风雨)强调的是个流的操作应该可以的!

|
up

    
 
 

您可能感兴趣的文章:

  • 求救啊 高分求救 UNIX下关于进程通讯的问题~
  • 求救!!!硬件高请进、、、、、、(十万火急,高分求救。)
  • 数据库 iis7站长之家
  • Solaris操作系统在启动的时候出错,急急救命呀 高分求救~~~
  • 高分求救!!!(200)我回多问相同问题来给分的,急急急
  • 高分求救!一个随机数产生的问题
  • 高分求救:有关内嵌汇编!!急!!!
  • 高分求救!jar文件直接双击运行的问题!
  • 大虾们谁有linux desktop 3.0(红旗)的序列号呀,高分求救!500
  • 高分求救:关于gnome/gtk+的问题
  • 高分在线求救!!!
  • 高分求救,关于jbuilder编程
  • 高分求救:简单问题
  • 为做需拟主机,单机架设DNS高分求救
  • 求救,帮忙,谢谢,高分相送!
  • linux 高分求救
  • 高分求救:我的solaris8如何进行网络配置?解决立即送分!
  • 高分求救:Linux下如何改变Ramdisk大小!急!!在线等待!!!
  • 高分求救!!基于http协议的代理图片显示不了
  • 高分求救,请教各位大侠!!!
  • 谁能给我个得到一幅图象的长度和宽度的方法,最好是代码.高分!!
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 高分求助高分求助高分求助高分求助高分求助高分求助
  • 谁参加过weblogic的证书考试,是否有经验可供参考?高分高分高高分
  • 哪里有JB6下载啊,高分相送,救命
  • 高分求救!我在uclinux上运行应用程序时出现内存分配错误,不知如何解决,解决者高分!!
  • 哪里去找中文的EJB文章?高分悬赏!
  • 有jsp的upload和download 代码么,高分相报!
  • (高分求助)请问,那里有软件开发的<设计文档>
  • 高分寻求jsp代码(网上调查系统,新闻发布系统)就这点分了
  • 高分求购做饼图、线形图的源吗?
  • 关于linu下的中文输入.(高分:300)
  • 一个简单的问题,高分求助!!!
  • 高分求购jbulider6得注册码,企业版本,个人版本都要
  • Linux远程访问的问题,高分求教:)
  • 请问哪儿有Solaris8的光盘映像文件下载???高分相赠!!!
  • 高分求“Ration Rose”&"JBuilder6.0"&"VisualCafe"
  • VJ的一个问题,高分求助,熟悉VJ得请进!
  • 高分求购:linux和unix命令大全电子文档
  • 急救:关于BLOB数据类型---在线等待,高分相送!
  • 求UNIXWARE7.11的原版下载,高分相赠,在线等待!!!
  • 关于java?高分相送!


  • 站内导航:


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

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

    浙ICP备11055608号-3