簡體   English   中英

如何將空字符串更新為Oracle Clob

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM