繁体   English   中英

如何使用setCharacterStream在Oracle中更新Clob?

[英]How to use setCharacterStream to update Clob in Oracle?

当我使用以下代码片段更新Oracle Clob时:

     String toBeUpdated = ""
     StringReader reader = new StringReader(toBeUpdated);
     pStmt.setCharacterStream(parameterIndex,reader , toBeUpdated.length());

当字符串“ toBeUpdated”的长度稍大一些(一般大于5000)并且一个值已经准备好存储到db中时,它没有任何异常,并且当我运行上面的方法时,该值在方法executeUpdate()中返回了代码。 但是更奇怪的是我检查了数据库并发现该列为空。(应使用新值对其进行更新)。

它不是每次都发生,而是随机发生。 我尝试使用pStmt.setString()代替pStmt.setCharacterStream,一切都会好起来的。 据我所知,setString被限制为最大字符串大小(63000),因此无法提出解决方案。

有人能照亮我或经历过吗?

Oracle通过字符串为存储CLOB提供类。 我已经使用以下代码,并且可以正常工作:

    long id = ...
    String content = ... // CLOB content
    try {
        Class.forName ("oracle.jdbc.OracleDriver");
        Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@MY_SERVER:1521:MY_DB", "user", "pass");
        String query = "UPDATE MY_TABLE SET MY_CLOB_COLUMN = ? WHERE ID = ? ";
        OraclePreparedStatement opstmt = (OraclePreparedStatement)conn.prepareStatement(query);
        opstmt.setStringForClob(1, content);
        opstmt.setLong(2, id);
        int result = opstmt.executeUpdate();
         System.out.println("Resultado para : " + tabla + " - " + columna + "  - " +  id + ":" + result);
    } catch (SQLException ex) {
        //Log here
    } catch (ClassNotFoundException ex) {
        //Log here
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM