当我使用以下代码片段更新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),因此无法提出解决方案。
有人可以点亮我或体验过这个吗?
答案 0 :(得分:1)
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
}