gpt4 book ai didi

java - 如何将空字符串更新到oracle Clob

转载 作者:行者123 更新时间:2023-12-02 00:34:40 29 4
gpt4 key购买 nike

我知道它可以通过使用 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 没有更新为空字符串,它仍然存储为以前的值。

有人可以帮助我吗?

最佳答案

正如我在 your other question 中已经提到的那样:根据我的经验, 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 定位器时,才需要对行进行锁定(至少这是我对手册链接引用的理解)。

关于java - 如何将空字符串更新到oracle Clob,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8163827/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com