把一图片文件存入ORACLE数据库中,用的是BOLB数据类型,可是插不进去!提示IO异常!!
原代码:
<%@ 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.200.2:1521:CKXX";   ////其中CKXX为SID
String uid="USER";
String pwd="USER";
Connection conn = DriverManager.getConnection(url,uid,pwd);request.setCharacterEncoding("gb2312");
String filename=request.getParameter("image"); try { 
FileInputStream str=new FileInputStream(filename); 
String sql="insert into CONTROL(V_ID,B_IMAGE) values(11,?)"; 
PreparedStatement pstmt=conn.prepareStatement(sql); 
pstmt.setBinaryStream(1,str,str.available()); 
pstmt.execute(); 
out.println("Success,You Have Insert an Image Successfully"); 
}catch(SQLException e){ out.println(e); } 
conn.close();
%>错误提示:
exception javax.servlet.ServletException: Io 异常: Connection reset by peer: socket write error
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:846)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:779)
org.apache.jsp.OFFICE.testimage_jsp._jspService(testimage_jsp.java:78)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
root cause java.sql.SQLException: Io 异常: Connection reset by peer: socket write error
oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:180)
oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:222)
oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:335)
oracle.jdbc.driver.OracleStatement.close(OracleStatement.java:706)
oracle.jdbc.driver.OraclePreparedStatement.privateClose(OraclePreparedStatement.java:335)
oracle.jdbc.driver.OraclePreparedStatement.close(OraclePreparedStatement.java:270)
oracle.jdbc.driver.OracleConnection.close_statements(OracleConnection.java:2003)
oracle.jdbc.driver.OracleConnection.close(OracleConnection.java:1227)
org.apache.jsp.OFFICE.testimage_jsp._jspService(testimage_jsp.java:71)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
note The full stack trace of the root cause is available in the Apache Tomcat/5.0.30 logs.

解决方案 »

  1.   

    我重新启动了TOMCAT,还是不行!
    但是其他操作都正常的!
    这是什么原因呢?
      

  2.   

    blob不能用insert的,在入库之前必须有一个初始化,
    如果入库之前这条记录已经存在,那么:
              String updatePhoto =
                  "update 表 set 图片字段的名字=empty_blob() where 关键字字段的名字 = '"+x+"'";
              st.executeUpdate(updatePhoto);
              String selectPhoto =
                  "select 图片字段的名字 from 表 where 关键字字段的名字 = '"+x+"' for update";
              rs = st.executeQuery(selectPhoto);
              if (rs.next()) {
                oracle.sql.BLOB blob = (oracle.sql.BLOB)rs.getBlob("ZP");            BufferedOutputStream out = new BufferedOutputStream(blob.getBinaryOutputStream());
                JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
                encoder.encode(stuImage.getImage());
                conn.commit();
                conn.setAutoCommit(true);          }
      

  3.   

    你可以查一下关于blob字段的 介绍的书籍,最基本的书里就可以,这是blob字段的基本操作