我最近遇到一个问题,试图从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是有效的。正如我指出的那样,如果我在数据库中插入相同的值,错误就会消失 –