[英]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.