我最近遇到一個問題,試圖從Oracle數據庫檢索CLOB值與的Java。有一個表將XML文件存儲爲CLOB。 NLS_CHARACTERSET
設置爲AL32UTF8
。 如果我嘗試使用java.sql
包檢索值,然後使用ResultSet.getClob().getAsciiStream()
,然後使用UTF-8
編碼將其轉換爲字符串,然後我得到一個有效的XML。java.sql.ResultSet.getString()返回字符串多餘的字符
但是,如果我使用ResultSet.getString()
,XML解析器失敗,解析異常。
調試時,提取的值看起來像this。它只包含文件的一半。
其他XML文件可以用ResultSet.getString()
沒有問題的選擇。
我沒有看到在損壞的和有效的XML的ASCII表示方面有任何明顯的區別。
當您向數據庫重新插入相同的值時問題得到解決。
你能解釋一下這種行爲嗎ResultSet.getString()
方法嗎?
有關Oracle信息
Oracle version is 12.1.0.2.0.
關於JDK的信息:
java version "1.7.0_131"
OpenJDK Runtime Environment (rhel-2.6.9.0.0.1.el7_3-x86_64 u131-b00)
OpenJDK 64-Bit Server VM (build 24.131-b00, mixed mode)
'ResultSet.getString()'和'ResultSet.getClob()'從存儲文件返回數據,我檢查。存儲的XML是有效的。正如我指出的那樣,如果我在數據庫中插入相同的值,錯誤就會消失 –