各位高手,我想向oracle中插入clob,我的代码如下:
    public static void clobInsert(Connection conn, String infile) throws Exception
    {
String strTemp = "";for(int i=0;i<1000;i++)strTemp+=i;
        oracle.jdbc.driver.OraclePreparedStatement pstmt = null;
        oracle.jdbc.driver.OracleResultSet rs = null;
        String query = "";        conn.setAutoCommit(false);
        query = "insert into test(id,content) values(?,empty_clob())";
        pstmt = (oracle.jdbc.driver.OraclePreparedStatement)conn.prepareStatement(query);
pstmt.setInt(1,1);
pstmt.executeUpdate();
pstmt = null;
query = "select content from test where id = 1 for update";
pstmt =(oracle.jdbc.driver.OraclePreparedStatement)conn.prepareStatement(query);
rs= (oracle.jdbc.driver.OracleResultSet)pstmt.executeQuery(); oracle.sql.CLOB clobtt = null;
if(rs.next()){
     clobtt = (oracle.sql.CLOB)rs.getClob(1);
}
Writer wr = clobtt.getCharacterOutputStream();
wr.write(strTemp);
wr.flush();
wr.close();
rs.close();
conn.commit();
     }驱动:oracle10g的jdbc14
出现错误   java.io.IOException: Io 异常: End of TNS data channel
我在网上查了好久了,都是这样说的。

解决方案 »

  1.   

    Clob对象最好用BinaryInputStream写入数据库
      

  2.   

    我查了好多的资料,包括csdn的贴子,对clob都是这么说的。可就是有错误,怎么办呀???
      

  3.   

    试试下面的方法
    try {
               /* 插入一个空的CLOB对象 */
               stmt.executeUpdate("INSERT INTO TEST_CLOB VALUES ('111', EMPTY_CLOB())");
               /* 查询此CLOB对象并锁定 */
               ResultSet rs = stmt.executeQuery("SELECT CLOBCOL FROM TEST_CLOB WHERE ID='111' FOR UPDATE");
               while (rs.next()) {
                   /* 取出此CLOB对象 */
                   oracle.sql.CLOB clob = (oracle.sql.CLOB)rs.getClob("CLOBCOL");
                   /* 向CLOB对象中写入数据 */
                   BufferedWriter out = new BufferedWriter(clob.getCharacterOutputStream());
                   BufferedReader in = new BufferedReader(new FileReader(infile));
                   int c;
                   while ((c=in.read())!=-1) {
                       out.write(c);
                   }
                   in.close();
                   out.close();
               }
               /* 正式提交 */
               conn.commit();
           } catch (Exception ex) {
               /* 出错回滚 */
               conn.rollback();
               throw ex;
           }
      

  4.   

    sql="insert into site_content(id,createtime,name,description,author,waptype,catalogid,isvalid,content)"
    +" values('"+contentid+"',sysdate,'"+articleName+"','"+description+"','"+author+"','1','"+catalogid+"','0',EMPTY_CLOB())";
    stmt.executeUpdate(sql);//建立文章内容

    sql="select content from site_content where id='"+contentid+"' FOR UPDATE";//将内容写CLOB字段
    rs=stmt.executeQuery(sql);
    if(rs.next()){
    oracle.sql.CLOB clob = (oracle.sql.CLOB)rs.getClob("content");
    //java.io.OutputStream os =clob.getAsciiOutputStream();
    //byte[] data = content.getBytes("ASCII");
    BufferedWriter os = new BufferedWriter(clob.getCharacterOutputStream());
    char[] data=content.toCharArray();
    os.write(data);
    os.flush();
    }
    这是一段写的代码,最一个字段就是clob型的,你看看吧
      

  5.   

    以上二位,你们的代码自己运行过吗?你们说的方法我在网上找到过,每次的执行结果都是产生例外 java.io.IOException: Io 异常: End of TNS data channel
      

  6.   

    更换你的应用的jdbc包,换成10g及以上的,就可以了,操作如同字符型