JDBC: двойное чтение для правильного получения XMLType с помощью getAsciiStream () - PullRequest
0 голосов
/ 27 марта 2012

У меня очень странная проблема с правильным получением данных, хранящихся в столбце XMLType, через getAsciiStream (). Мои XML-файлы (извлеченные из базы данных Oracle Oracle 11g Enterprise Edition Release 11.2.0.2.0 - 64bit) имеют размер больше 32 КБ.

Я использую 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();                              
        }
...