这不关数据库的问题blob最大长度为2G。
估计是你程序的问题,建议你使用SmartUpload来上传。

解决方案 »

  1.   

    大于4K时报出的错误信息:
    java.sql.SQLException: Io 异常: Connection reset by peer: JVM_recv in socket input stream我用的是是JDK1.4+TOMCAT4.3+ORACLE9I
      

  2.   

    你使用SmartUpload来试试,这样就不会报错了。
      

  3.   

    SmartUpload也试过了
    是ps.setBinaryStream(3,fis,a);这一句大于4K的时候不行。
      

  4.   

    我也遇到过这种情况,费了我将近一天的时间,找到了解决办法,当时只是激动了,没有看究竟是为什么,现在也不知道那个链接是什么了。下面是解决办法:
    long count=0;
    Connection conn=db.getConnection();conn.setAutoCommit(false);PreparedStatement ps =conn.prepareStatement("insert into tfiles(id,filename,file_file) values(?,?,empty_blob())");ps.setLong(1,1);
    java.io.File filename=new java.io.File("e:/upfile/1/abc.txt");
    ps.setString(2,filename.getName());ps.executeUpdate();
    ps.close();Statement stmt = conn.createStatement();
    //定位到刚才插入的记录
    ResultSet rs = stmt.executeQuery("select file_file from tfiles where id=1");
    if (rs.next()) {
      //更新BLOB字段,需要注意的是,这里使用的是Oracle的JDBC驱动中的类
      //oracle.sql.BLOB;并且,Resultset需要强制转换为类型
      //Oracle.jdbc.OracleResultSet
      BLOB mybl = ((OracleResultSet)rs).getBLOB(1);
      //获得BLOB字段的写入流
      OutputStream out = mybl.getBinaryOutputStream();
      FileInputStream inf = new FileInputStream(filename);
      byte[] buffer = new byte[4096];
      int length = -1;
      //读入文件输入流,并写入BLOB写入流中
      while ((length = inf.read(buffer)) != -1)
        out.write(buffer,0,length);
        //关闭输入输出流
      inf.close();
      out.close();
    }
    //关闭相关资源
    rs.close();
    stmt.close();
    //提交更新
    conn.commit();