日期:2014-05-17  浏览次数:20720 次

一个问题困扰了我半天 关于读取BLOB字段
错误:
------------------------------------------------------
java.io.IOException: 必须登录到服务器
oracle.jdbc.dbaccess.DBError.SQLToIOException(DBError.java:717)
oracle.jdbc.driver.OracleBlobInputStream.needBytes(OracleBlobInputStream.java:249)
oracle.jdbc.driver.OracleBufferedStream.read(OracleBufferedStream.java:113)
com.yss.serve.UpfileServlet.doPost(UpfileServlet.java:64)
com.yss.serve.UpfileServlet.doGet(UpfileServlet.java:80)
javax.servlet.http.HttpServlet.service(HttpServlet.java:743)
javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
com.yss.serve.CheckLoginFilter.doFilter(CheckLoginFilter.java:35)

------------------------------------------------------
代码:
------------------------------------------------------
jdbcTemplate.query(sql, new Object[] {id},new ResultSetExtractor() {
public Object extractData(ResultSet rs) throws SQLException, DataAccessException {
rs.next();
InputStream ins = lobHandler.getBlobAsBinaryStream(rs,"Ffj");
return ins;
}
});
if (ret != null){
((InputStream)ret).read();//只要InputStream执行read()方法 就会报错
retrun null; 
}


------解决方案--------------------
探讨
感谢楼上的意见,但是不是这个问题

我用SQLSERVER数据库试验 就没问题
但是ORACLE就出现这个问题
异常应该是ORACLE抛出的

但是就是不知道怎么去解决
还望各位帮忙

------解决方案--------------------
探讨
说来奇怪,今天来发现这个异常没了
但是读取出来的INPUTSTREAM然后加载的图片,却怎么也显示不出来
但是在PL/SQL里,能看见正常的图片

//流生成图片代码
response.setContentType("image/gif");
response.setHeader("Accept-Ranges", "bytes");
OutputStream out = response.getOutputStream();
int i;
byte[] b = new byte[fileMaxSize];
while ((i = ins.read(b)) != -1) {
out.write(b, 0, i);
}
o…