File file = new File(_sp.get_file1());    
     fis = new FileInputStream(file);   
System.out.println( (int) file.length()) ;
     ps.setBinaryStream(10, fis, (int) file.length());    
     ps.executeUpdate() ;报错
12411
java.sql.SQLException: 无法从套接字读取更多的数据
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java)
at oracle.jdbc.dbaccess.DBError.check_error(DBError.java)
at oracle.jdbc.ttc7.MAREngine.unmarshalUB1(MAREngine.java)
at oracle.jdbc.ttc7.MAREngine.unmarshalSB1(MAREngine.java)
at oracle.jdbc.ttc7.Oall7.receive(Oall7.java)
at oracle.jdbc.ttc7.TTC7Protocol.doOall7(TTC7Protocol.java)
at oracle.jdbc.ttc7.TTC7Protocol.parseExecuteFetch(TTC7Protocol.java)
at oracle.jdbc.driver.OracleStatement.executeNonQuery(OracleStatement.java)
at oracle.jdbc.driver.OracleStatement.doExecuteOther(OracleStatement.java)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java)
at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java)
at com.xlh.data.daoImpl.SpDaoImpl.addSp(SpDaoImpl.java:42)
at com.xlh.data.daoImpl.TestSpDaoImpl.testaddSp(TestSpDaoImpl.java:34)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at junit.framework.TestCase.runTest(TestCase.java:154)
at junit.framework.TestCase.runBare(TestCase.java:127)
at junit.framework.TestResult$1.protect(TestResult.java:106)
at junit.framework.TestResult.runProtected(TestResult.java:124)
at junit.framework.TestResult.run(TestResult.java:109)
at junit.framework.TestCase.run(TestCase.java:118)
at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:130)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
java.sql.SQLException: 无法从套接字读取更多的数据
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java)
at oracle.jdbc.dbaccess.DBError.check_error(DBError.java)
at oracle.jdbc.ttc7.MAREngine.unmarshalUB1(MAREngine.java)
at oracle.jdbc.ttc7.MAREngine.unmarshalSB1(MAREngine.java)
at oracle.jdbc.ttc7.Oclose.receive(Oclose.java)
at oracle.jdbc.ttc7.TTC7Protocol.close(TTC7Protocol.java)
at oracle.jdbc.driver.OracleStatement.close(OracleStatement.java)
at oracle.jdbc.driver.OraclePreparedStatement.privateClose(OraclePreparedStatement.java)
at oracle.jdbc.driver.OraclePreparedStatement.close(OraclePreparedStatement.java)
at com.xlh.data.daoImpl.SpDaoImpl.addSp(SpDaoImpl.java:61)
at com.xlh.data.daoImpl.TestSpDaoImpl.testaddSp(TestSpDaoImpl.java:34)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at junit.framework.TestCase.runTest(TestCase.java:154)
at junit.framework.TestCase.runBare(TestCase.java:127)
at junit.framework.TestResult$1.protect(TestResult.java:106)
at junit.framework.TestResult.runProtected(TestResult.java:124)
at junit.framework.TestResult.run(TestResult.java:109)
at junit.framework.TestCase.run(TestCase.java:118)
at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:130)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)

解决方案 »

  1.   

    是不是文件流有问题了呀。  file.length()的大小是不是对的呀。
      

  2.   

    我改成这个样子就没有问题.怎么回事?
    ps.setBinaryStream(10, fis, 111); 
      

  3.   

    DatabaseFactory dbFactory = new DatabaseFactory();
    String sql = "insert into gys_sp values(?,?,?,?,?,?,?,?,?,?)";
    Connection conn = null;
    conn = dbFactory.getConnection();
    PreparedStatement ps = null;
    // Blob blob = new Blob() ;
    boolean flag = false;
    ResultSet rs = null; try {
    conn.setAutoCommit(false);
    ps = conn.prepareStatement(sql);
    ps.setInt(1, _sp.getId());
    ps.setString(2, _sp.get_spbm());
    ps.setString(3, _sp.get_spmc());
    ps.setDouble(4, _sp.get_spsjr());
    ps.setDouble(5, _sp.get_spsj());
    ps.setDouble(6, _sp.get_yf());
    ps.setString(7, _sp.get_gg());
    ps.setString(8, _sp.get_jtdz());
    ps.setString(9, _sp.get_spjs());
    ps.setString(10,"1");
    ps.executeUpdate(); sql = "select tp from gys_sp where id_admin=? and spbm=? FOR UPDATE"; ps = conn.prepareStatement(sql);
    ps.setInt(1, _sp.getId());
    ps.setString(2, _sp.get_spbm());
    rs = ps.executeQuery();
    if (rs.next()) {
    System.out.println("1") ;

    BLOB blob = (BLOB)rs.getBlob("tp") ;
    System.out.println("2") ;
    OutputStream outStream = ((BLOB) blob)
    .getBinaryOutputStream();
    System.out.println("3") ;
    File file = new File(_sp.get_file1());
    System.out.println("4") ;
    BufferedInputStream inStream = new BufferedInputStream(
    new FileInputStream(file));
    System.out.println("5") ;
    byte[] b = new byte[blob.getBufferSize()]; int lenth = 0; while ((lenth = inStream.read(b)) != -1) {
    outStream.write(b, 1, lenth);
    } inStream.close();
    outStream.flush();
    outStream.close();
    conn.commit() ; }
    conn.setAutoCommit(true);
    flag = true; } catch (SQLException e) {
    // TODO Auto-generated catch block
    System.out.println(e.getMessage());
    } catch (Exception e) {
    System.out.println(e.getMessage());
    } finally { try { if (rs != null) {
    rs.close();
    }
    if (ps != null) {
    ps.close();
    } if (conn != null) {
    dbFactory.closeConnection(conn);
    } } catch (Exception e) {
    e.printStackTrace();
    }
    }
    我改成这样但还是报错
    java.lang.AbstractMethodError: oracle.jdbc.driver.OracleResultSetImpl.getBlob(Ljava/lang/String;)Ljava/sql/Blob;
    at com.xlh.data.daoImpl.SpDaoImpl.addSp(SpDaoImpl.java:59)
    at com.xlh.data.daoImpl.TestSpDaoImpl.testaddSp(TestSpDaoImpl.java:34)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at junit.framework.TestCase.runTest(TestCase.java:154)
    at junit.framework.TestCase.runBare(TestCase.java:127)
    at junit.framework.TestResult$1.protect(TestResult.java:106)
    at junit.framework.TestResult.runProtected(TestResult.java:124)
    at junit.framework.TestResult.run(TestResult.java:109)
    at junit.framework.TestCase.run(TestCase.java:118)
    at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:130)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
      

  4.   

    问题解决了.
    原来是驱动版本太低
    旧的版本是 oracle.jdbc.driver.OracleResultSetImpl.getBlob(String str)而新版本是 oracle.jdbc.driver.OracleResultSetImpl.getBlob(Blob str)
      

  5.   


    只是驱动的问题?这个咋就可以哟。
    ps.setBinaryStream(10, fis, 111);