[英]How to update empty string to oracle Clob
我知道它可以通过使用SQL来工作
update activity set REFERENCE = EMPTY_CLOB() where id = ?
但是我不能这样,我不能在SQL中硬编码'EMPTY_CLOB()'。 我使用了如下方式:
String empty_string = "";
conn = getConnection();
pStmt = conn.prepareStatement("SELECT REFERENCE FROM activity WHERE ID = ? FOR UPDATE");
pStmt.setLong(1, 1);
rset = pStmt.executeQuery();
Clob clob = null;
while (rset.next()) {
clob = rset.getClob(1);
Writer writer = adapter.getCharacterOutputStream(clob);
writer.write(empty_string);
writer.flush();
writer.close();
}
pStmt = conn.prepareStatement("update activity set REFERENCE = ? WHERE ID = ?");
pStmt.setClob(1, clob);
pStmt.setLong(2, 1);
pStmt.executeUpdate();
但这没有用。 Clob并未更新为空字符串,但仍存储为先前值。
任何人都可以帮助我吗?
正如我在另一个问题中提到的 :以我的经验,getClob()和setClob()无法正常工作。
使用setCharacterStream()
代替:
StringReader clob = new StringReader("");
pStmt = conn.prepareStatement("update activity set REFERENCE = ? WHERE ID = ?");
pStmt.setCharacterStream(1, clob, 0);
pStmt.setLong(2, 1);
pStmt.executeUpdate();
这样,您还可以在更新之前删除不必要的SELECT,这也将提高性能。
另一种选择是简单地将该列设置为NULL
编辑:
使用较新的驱动程序(11.x),您可能还想尝试在CLOB列上使用setString()
和getString()
。
仅当在跨多个语句的事务中使用要保留的LOB定位器时,才需要锁定行(至少这是我对手册的链接参考的理解)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.