代码,用JSP向oracle数据库存取blob类型照片,帮忙看看.
运行插入图片时,显示成功,但是运行图片显示时,就是显示不出来图片.帮忙看看呀,先谢谢了.
inputblob.jsp
<%@ page contentType="text/html;charset=gb2312"%> 
<HTML>
<HEAD>
<TITLE>存储图片</TITLE>
</HEAD>
<body>
<FORM METHOD=POST ACTION="testblob.jsp">
编号<input type="text" name="id"><br>
图片<input type="file" name="image"><br>
<INPUT TYPE="submit"></form>
</body>
</HTML>testblob.jsp
<%@ page contentType="text/html;charset=gb2312"%> 
<%@ page import="java.sql.*" %>
<%@ page import="java.util.*"%>
<%@ page import="oracle.sql.*"%>
<%@ page import="java.io.*"%>
<html> 
<body> 
<%
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance(); 
String url="jdbc:oracle:thin:@192.168.0.78:1521:vps"; //orcl为你的数据库的SID 
String user="scott"; 
String password="tiger"; 
Connection conn= DriverManager.getConnection(url,user,password); 
//boolean defaultcommit = conn.getautocommit();
conn.setAutoCommit(false);
//建立Statement对象
int id=Integer.parseInt(request.getParameter("id"));
String filename=request.getParameter("image");
filename=new String(filename.getBytes("8859_1"),"gb2312");
//out.println(filename);
//获得所要显示图片的标题、存储路径、内容,并进行中文编码
FileInputStream str=new FileInputStream(filename);
try{
String sql="insert into t_blob values("+id+",empty_blob())";
Statement stmt = conn.createStatement();
//stmt.execute("insert into lobtest values (44,EMPTY_BLOB(),EMPTY_CLOB())");
stmt.executeUpdate(sql);
ResultSet rs=stmt.executeQuery("select blobcol from t_blob where id="+id+" for update");
//where caseid='"+caseid+"'";
if(rs.next()){
 oracle.sql.BLOB blob=(oracle.sql.BLOB)rs.getBlob("blobcol");
 BufferedOutputStream ou = new BufferedOutputStream(blob.getBinaryOutputStream());
 int bufferSize=blob.getBufferSize();
  BufferedInputStream in = new BufferedInputStream(str,bufferSize);
byte[] b=new byte[bufferSize];
int count=in.read(b,0,bufferSize);
while(count!=-1)
{
ou.write(b,0,count);
count=in.read(b,0,bufferSize);

 in.close();
 ou.close();
}
conn.commit();
}catch(Exception ex){
conn.rollback();
throw ex;
}
conn.setAutoCommit(true);
out.println("Success,You Have Insert an Image Successfully");
%>blobshow.jsp
<%@ page contentType="text/html;charset=gb2312"%> 
<%@ page import="java.sql.*" %>
<html>
<head>
<title>动态显示数据库图片</title>
</head>
<body>
<table>
<tr><td><IMG height=99 src="testimageout.jsp?id=2" width=136></td>
</tr>
</table>
</body>
</html>testimageout.jsp
<%@ page contentType="text/html;charset=gb2312"%> 
<%@ page import="java.sql.*" %>
<%@ page import="java.util.*"%>
<%@ page import="java.text.*"%>
<%@ page import="java.io.*"%> 
<html>
<body>
<%
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance(); 
String url="jdbc:oracle:thin:@192.168.0.78:1521:vps"; //orcl为你的数据库的SID 
String user="scott"; 
String password="tiger"; 
Connection conn= DriverManager.getConnection(url,user,password); 
conn.setAutoCommit(false);
Statement stmt=con.createStatement();
ResultSet rs=null; 
//建立ResultSet(结果集)对象
int id= Integer.parseInt(request.getParameter("id"));
//获得所要显示图片的编号id,并转换为整型
ServletOutputStream sout = response.getOutputStream();
String sql = "select blobcol from t_blob WHERE id="+id+""; 
//要执行查询的SQL语句
rs=stmt.executeQuery(sql);
if(rs.next()) {
java.sql.Blob blob=rs.getBlob("blobcol");
//oracle.sql.Blob blob=(oracle.sql.Blob)rs.getBlob("blobcol");
//图片输出的输出流
InputStream in = blob.getBinaryStream();
byte b[] = new byte[0x7a120];
for(int i = in.read(b); i != -1;)
{
sout.write(b); 
//将缓冲区的输入输出到页面
in.read(b);
}
sout.flush();
//输入完毕,清除缓冲
sout.close();
}
%>
</body>
</html>