#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. Как это связано с вопросом?