insert into table value('id','clobcol')执行这个sql时候  传入的  clobcol 字符串长度大于4000的时候会爆 string literal too long 的错。想用update的方法解决
oracle.sql.CLOB clob;
clob.putString(1, clobValue);   putString的方法都废弃不用了。

请问有没有好的办法给一个。

解决方案 »

  1.   

    大概类似于这种结构,
    先写成empty_clob()
    再更新dataBaseService.runQuery(" update "+tableName+" set "+columnName+" =empty_clob() where " +primaryKeySql);
    Session session = HibernateUtil.getSessionFactory().getCurrentSession();
    Transaction tran = session.beginTransaction();
    Connection conn = session.connection();
    Statement pstmt = null;
    try {
    String sql = "select  "+columnName+" from "+tableName+" where "+primaryKeySql+" for update";
    pstmt = conn.prepareStatement(sql);
    java.sql.ResultSet rs= pstmt.executeQuery(sql);
    if(rs.next()){
    oracle.sql.CLOB clob = (oracle.sql.CLOB)rs.getClob(1);

    clob.setString(1, data);
    sql = " update "+tableName+" set "+columnName+" =? where " +primaryKeySql;
    PreparedStatement p = conn.prepareStatement(sql);
    p.setClob(1, clob);
    p.executeUpdate();
    }
          tran.commit();
    } catch (Exception e) {
    tran.rollback();
    e.printStackTrace();
    } finally {
      

  2.   

    我在想 大于4000  我就截串   然后用后面的update 进去!
      

  3.   

    CLOB clob = CLOB.createTemporary((OracleConnection)ps.getConnection(),true,1); 
    clob.putString(1,str);
    ps.setClob(1, clob);
    这个方法可以直接插入数据库,要不然就得先插入一条空数据,然后再更新http://blog.csdn.net/wazj0517/archive/2006/10/19/1341074.aspx
      

  4.   

    已解决、以2000为单位分割字符  然后update进去