Java: Oracle XMLType JDBC

#java #xml #oracle #jdbc

#java #xml #Oracle #jdbc

Вопрос:

Как я могу перенести oracle XmlElement в JDBC?

 java.sql.Statement st = connection.createStatement(); // works
oracle.jdbc.OracleResultSet rs = st.execute("SELECT XMLElement("name") FROM dual");
rs.getString(1); // returns null, why?
oracle.sql.OPAQUE = (OPAQUE) rs.getObject(1); // this works, but wtf is OPAQUE ?
  

В принципе, я хочу прочитать строку типа <name> </name> или любой другой вывод в формате XML. Но мне всегда не удается привести выходные данные к чему-либо разумному. Только странный oracle.sql.OPAQUE работает, но я совершенно не знаю, что с этим делать. Even toString() не переопределяется!

Есть идеи? Как прочитать XmlElement (XMLType) от Oracle (я использую Oracle 10.0.2)?

Ответ №1:

Вы не можете. Драйвер JDBC Oracle не поддерживает XML-тип JDBC должным образом.

Единственное, что вы можете сделать, это преобразовать XML как часть запроса:

ВЫБЕРИТЕ to_clob(XmlElement("имя")) из dual

Затем вы можете извлечь XML с помощью getString()

в качестве альтернативы вы также можете использовать XMLElement("name").getClobVal() , но опять же это часть вашего запроса, и к нему можно получить доступ в виде строки из вашего класса Java

Комментарии:

1. при выборе to_clob (XmlElement («name»)) из dual я продолжаю получать ORA-1652: невозможно расширить временный сегмент на 128 в табличном пространстве temp

2. Должно быть что-то с вашей установкой. У меня это отлично работает (11.1.0.6). Вы пробовали версию getClobVal()?

3. Нет, какой экземпляр мне следует использовать?

4. Просто замените to_clob(XmlElement(«имя»)) на XmlElement(«имя»).getClobVal()

5. да, это сработало! большое вам спасибо … кстати, я никогда не видел такого ужасного Java API, как этот, напрямую от Oracle …

Ответ №2:

ORA-1652: невозможно расширить сегмент temp на 128 в табличном пространстве temp — это совершенно другая ошибка, с XmlElement ничего не связано.

Просто вы должны настроить автоматическое изменение размера вашего временного файла или придать ему больший размер:

  ALTER TABLESPACE TEMP ADD TEMPFILE '/u01/app/oracle/product/10.2.0/db_1/oradata/oracle/temp01.dbf' SIZE 10M AUTOEXTEND ON

ALTER DATABASE TEMPFILE '/u01/app/oracle/product/10.2.0/db_1/oradata/oracle/temp01.dbf' RESIZE 200M
  

Комментарии:

1. Как это связано с вопросом?