Я пытаюсь извлечь столбец XMLTYPE из таблицы Oracle с использованием JDBC и возникают некоторые проблемы

1

Я пытаюсь извлечь столбец XMLTYPE из таблицы Oracle, используя JDBC.
У меня есть запрос:

    select "XML_FILE" FROM "TABLE_NAME"

и когда я запускаю запрос в Oracle SQL Developer, он полностью возвращает все строки XMLTYPE.

Но когда я запускаю следующий код Java и запускаю тот же запрос, я всегда получаю "null" для каждого столбца. Я не уверен, что может пойти не так, и я пробовал делать много разных вещей, но ничего не работало. Важное примечание - поля XMLTYPE имеют XML файл, содержащий не более 60 000 строк XML.

Код Java, который я использую:

String query = "select \"XML_FILE\" FROM \"TABLE_NAME\"";
//creating PreparedStatement object to execute query
PreparedStatement preStatement = null;
try {
   System.out.println("QUERY: "+query);
   preStatement = con.prepareStatement(query);   //con is the Connection obj
} catch (SQLException e) {
   e.printStackTrace();  
}

ResultSet result = null;
try {
   result = preStatement.executeQuery();
} catch (SQLException e) {
   e.printStackTrace();  
}
System.out.println("RESULT SET: "+result.toString());
String dataResult = "";
while(result.next()){
   for(int i=1; i<=numCols; i++){
      dataResult += result.getObject(i)+"\t";
      //dataResult += result.getString(i)+"\t";
   }
   dataResult+="\n";
   System.out.println("RESULT: \'"+dataResult+"\'");
}   

Любая помощь будет принята с благодарностью. Благодарю!

Теги:
jdbc
xmltype

3 ответа

0

to_clob использовать to_clob в запросе select

to_clob(xmlelement ( "employee", 'Bob' ))  ) as SQLXMLCOL1 from dual 

затем используйте toString() в resultSet

0

Вы имеете в виду ваш вызов result.toString() возвращает null? Если да, то не так, как вы получаете данные из набора результатов в любом случае. Я попробовал пару различных тестов, используя драйвер DataDirect Oracle JDBC и получил только null от result.toString(). Если я вызову rs.getString() для столбца XMLType, я бы получил данные XML, которые я вставил; Вызов getObject(), возвращенный в локатор LOB (я думаю, не проверял дважды), который ссылается на данные. Печать, которая не предоставила мне данные, просто идентификатор для локатора.

0

Вы не можете получить это как строку (varchar) из-за ограничений длины varchar (4000 байт). Выберите его как CLOB:

    String query = "SELECT TBL.XMLTYPECOLUMN.GETCLOBVAL() FROM TABLE TBL";
    rs = stmt.executeQuery(query);
    xmlClob = (Clob) rs.getClob(1);

http://kodehelp.com/how-to-read-xmltype-column-from-database-using-jdbc/

  • 0
    Кажется, что это будет работать, но когда я запускаю запрос в Oracle, он выдает ошибку «ORA-00906: отсутствует левая скобка». Любая идея, почему это будет выбрасывать эту ошибку?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню