代码如下:
.....
        st = conn.prepareStatement(sql);
        st.setInt(1, Integer.parseInt(mailId));
        st.setString(2, mailTitle);
        Reader clobReader = new StringReader(mailContent);   
        st.setCharacterStream(3, clobReader, mailContent.length());
        
        st.executeUpdate();  ---------当mailContent长度大于4000多时,这里执行就会报错
    }catch(Exception e){
     e.printStackTrace();
     throw new Exception("插入clob报错!\n" + e.getMessage());     
.....java.sql.SQLException: No more data to read from socket
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:179)
at oracle.jdbc.dbaccess.DBError.check_error(DBError.java:1160)
at oracle.jdbc.ttc7.MAREngine.unmarshalUB1(MAREngine.java:962)
at oracle.jdbc.ttc7.MAREngine.unmarshalSB1(MAREngine.java:894)
at oracle.jdbc.ttc7.Oall7.receive(Oall7.java:383)
at oracle.jdbc.ttc7.TTC7Protocol.doOall7(TTC7Protocol.java:1973)
at oracle.jdbc.ttc7.TTC7Protocol.parseExecuteFetch(TTC7Protocol.java:1119)
at oracle.jdbc.driver.OracleStatement.executeNonQuery(OracleStatement.java:2191)
at oracle.jdbc.driver.OracleStatement.doExecuteOther(OracleStatement.java:2064)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:2989)
at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:658)
at org.jboss.resource.adapter.jdbc.WrappedPreparedStatement.executeUpdate(WrappedPreparedStatement.java:335)

解决方案 »

  1.   

    可能是mailContent太长.看看数据库中对应的大小是多少.我记得sqlsever最长好像是8000
      

  2.   

    ls说的数字差不多     每个字段都有长度  看你的数据库吧  太大可以考虑用  blob
      

  3.   

    VARCHAR2(<size>) varchar2数据类型是一种可变长度的、有最大长度的字母数字型数据。Varchar2类型的字段长度可以达到4000字节,Varchar2类型的变量长度可以达到32676字节。
    本文来自: 中国网管联盟(bitsCN.com) 详细出处参考:http://www.bitscn.com/oracle/base/200804/136996.html
    再大了还是用ls的建议用blob吧
      

  4.   

    解决了,是sun jdbc的bug,字符串一大,就会报连接reset