JDBC:双读取通过getAsciiStream()正确检索XMLType

时间:2012-03-27 09:52:33

标签: java xml oracle jdbc xmltype

我有一个非常奇怪的问题,就是通过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();                              
        }

0 个答案:

没有答案