我有一个非常奇怪的问题,就是通过getAsciiStream()正确检索存储在XMLType列中的数据。我的XML(从Oracle DB Oracle 11g企业版11.2.0.2.0版 - 64位获取)大于32K。
我正在使用Java 1.5.0_22和JDBC驱动程序ojdbc5.jar。
如果我只用一个阅读周期来获取XML,那么我会在大约第32.000位丢失一个字符。
如果我在第二个阅读周期中获取XML,通过最后一个,我可以正确获取:非常奇怪。
你知道为什么会这样吗?
提前谢谢!
这是我的代码:
while (resultSet.next() && resultSet.getObject(2) != null) {
lastId = resultSet.getInt(1);
stmtA.setInt(1, lastId);
// FIRST CYCLE - LOSING 1 CHARACTER
inputSB2 = new StringBuffer();
reader2 = new BufferedReader(resultSet.getCharacterStream(2));
String inputLine2;
while (true) {
inputLine2 = reader2.readLine();
if (inputLine2 == null) break;
inputSB2.append(inputLine2.replaceAll("\u0000", ""));
}
// SECOND CYCLE - PERFECT
inputSB = new StringBuffer();
reader = new BufferedReader(new InputStreamReader(resultSet.getAsciiStream(2)));
String inputLine;
while (true) {
inputLine = reader.readLine();
if (inputLine == null) break;
inputSB.append(inputLine.replaceAll("\u0000", ""));
}
// Example Output - ID: 666712 LengthString1: **244514** LengthString2: **244513**
System.out.println("ID: " + lastId + " LengthString1: " + inputSB.toString().length() + " LengthString2: " + inputSB2.toString().length());
stmtA.setStringForClob(2, inputSB.toString());
stmtA.executeUpdate();
}