Я пытаюсь извлечь столбец 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+"\'");
}
Любая помощь будет принята с благодарностью. Благодарю!
to_clob
использовать to_clob
в запросе select
to_clob(xmlelement ( "employee", 'Bob' )) ) as SQLXMLCOL1 from dual
затем используйте toString()
в resultSet
Вы имеете в виду ваш вызов result.toString() возвращает null? Если да, то не так, как вы получаете данные из набора результатов в любом случае. Я попробовал пару различных тестов, используя драйвер DataDirect Oracle JDBC и получил только null от result.toString(). Если я вызову rs.getString() для столбца XMLType, я бы получил данные XML, которые я вставил; Вызов getObject(), возвращенный в локатор LOB (я думаю, не проверял дважды), который ссылается на данные. Печать, которая не предоставила мне данные, просто идентификатор для локатора.
Вы не можете получить это как строку (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/