免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1649 | 回复: 4
打印 上一主题 下一主题

求救:操作oracle大对象问题! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-09-11 18:41 |只看该作者 |倒序浏览
本人原来存储图片的时候都是存储图片的路径,最近想改变下,直接把图片以二进制的形式进行存储,参考了不少资料过后,终于将图象能存储到oracle中,只是在读取的时候碰到些问题,说明如下:我的环境是winxp+jdk1.4.2
1,我首先写了个用来读取并显示图片的servlet,代码如下:
package com.zhy.servlet;

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
import java.sql.*;
import com.zhy.message.Utils.DBConnection;
public class getphoto extends HttpServlet {
private static final String CONTENT_TYPE = "image/jpeg";
private Connection conn;
public void init() throws ServletException {

}

public void doGet(HttpServletRequest request,
HttpServletResponse response)  throws ServletException, IOException {

byte [] buf=null;
try{
String searchSql="select photo from oa.test";
Statement stmt = conn.createStatement();
ResultSet RS = stmt.executeQuery(searchSql);
oracle.sql.BLOB blob = null;
    while (RS.next()) {               
                blob = (oracle.sql.BLOB) RS.getBlob(1);
                System.out.println(blob.length());
            }           
            InputStream is = blob.getBinaryStream();           
            buf=new byte[is.available()];
            
response.setContentType("image/jpeg";
ServletOutputStream out = response.getOutputStream();  
out.write(buf);
out.flush();
}catch(Exception e){
e.printStackTrace();
}
}
public void destroy() {
}
}


2,我在web-xml设置了这个servlet,如下:
<servlet>;
<servlet-name>;getphoto</servlet-name>;
<display-name>;getphoto</display-name>;
<description>;getphoto</description>;
<servlet-class>;com.zhy.servlet.getphoto</servlet-class>;
</servlet>;
<servlet-mapping>;
<servlet-name>;getphoto</servlet-name>;
<url-pattern>;/getphoto</url-pattern>;
</servlet-mapping>;

3,我的jsp页面如下:
<%@ page contentType="text/html; charset=gb2312" %>;
<html>;
<head>;
<title>;</title>;
</head>;
<body>;
<h1 align="center">;<font color="#FF0000">;数据库图片展示</font>;</h1>;
&amp;<br>;
<hr>;
<img src="/getphoto">;<br>;
<hr>;
</body>;
</html>;

    经过以上的步骤,我在访问把个页面的时候,图片的位置却不显示图片,我查看图片的属性,发现类型为不可用,我不知道问题出在哪了,希望高人能能指点指点!

论坛徽章:
0
2 [报告]
发表于 2005-09-12 07:59 |只看该作者

求救:操作oracle大对象问题!

why?why?why?why?why?why?why?

论坛徽章:
0
3 [报告]
发表于 2005-09-12 21:34 |只看该作者

求救:操作oracle大对象问题!

首先这条语句是会有bug的   buf=new byte[is.available()];

其次你可以先试试看能不能将图片取出来(即通过上面的程序生成正常的图片),然后再分析一下就能得到问题

最后图片用blob的方式存在大部分环境下并不是一个好的解决方案。

论坛徽章:
0
4 [报告]
发表于 2005-09-12 22:10 |只看该作者

求救:操作oracle大对象问题!

我也很想知道到底有什么更好的方案,由于我的图片很多,而且很杂乱,自己不便管理,所以就指望数据库帮忙管理管理,我曾经把存储图片的时候,都是将图片的相对路径存储在数据库中,显示的时候再通过这个路径显示图片,麻烦您能告之更为合理的解决方案!谢谢,,我一直不知道究竟采用什么样的方法才是现在web应用的真正解决方法!
    另外对于上面的代码,我把读取的图片写入文件系统的时候,却能实现,而且我采用以下的方法,就能显示了jpg文件了,
InputStream is = blob.getBinaryStream();
buf=new byte[is.available()];
response.setContentType("image/*";
ServletOutputStream out = response.getOutputStream();
JPEGImageDecoder decoder=JPEGCodec.createJPEGDecoder(is);
BufferedImage image=decoder.decodeAsBufferedImage();
JPEGImageEncoder encoder=JPEGCodec.createJPEGEncoder(out);
encoder.encode(image);
image.flush();
is.close();
out.flush();


能再指点指点么?

论坛徽章:
0
5 [报告]
发表于 2005-09-13 10:24 |只看该作者

求救:操作oracle大对象问题!

<img src="/getphoto">;<br>;
这条语句应该返回的是图片的url吧?

谈不上指点,只说明一下自己遇到的情况。

如果*图片很多的话*,无论在数据库备份还是程序处理上面数据库存储图片不是一个最佳的解决方法。我见的比较多的方法是就是你先前说的方法,不过他们会用特定的规则生成图片的名称,以方便备份。*图片不多*的情况下,用数据库存储就好了。

个人的一点了解,有问题请指出。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP