【问题标题】:Java: Oracle XMLType + JDBCJava:Oracle XMLType + JDBC
【发布时间】:2011-05-18 03:53:18
【问题描述】:

如何将 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 有效,但我完全不知道该怎么做。甚至toString() 也没有被覆盖!

有什么想法吗?如何阅读 Oracle 的(我使用的是 Oracle 10.0.2)XMLElement (XMLType)?

【问题讨论】:

    标签: java xml oracle jdbc


    【解决方案1】:

    你不能。 Oracle 的 JDBC 驱动程序不正确支持 JDBC XML 类型。

    您唯一能做的就是将 XML 转换为查询的一部分:

    SELECT to_clob(XMLElement("name")) from dual

    然后您可以使用 getString() 检索 XML

    或者您也可以使用XMLElement("name").getClobVal(),但这也是您查询的一部分,它可以作为字符串从您的 Java 类中访问

    【讨论】:

    • on SELECT to_clob(XMLElement("name")) from dual 我不断收到 ORA-1652: unable to extend temp segment by 128 in tablespace temp
    • 必须与您的安装有关。它对我来说很好(11.1.0.6)。您是否尝试过 getClobVal() 版本?
    • 不,我应该使用什么实例?
    • 只需将 to_clob(XMLElement("name")) 替换为 XMLElement("name").getClobVal()
    • 是的,成功了!非常感谢...顺便说一句,我从未见过像这样糟糕的 Java API,直接来自 Oracle ...
    【解决方案2】:

    ORA-1652: 无法在表空间 temp 中将 temp 段扩展 128 是 完全不同的错误,与 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
    

    【讨论】:

    • 这与问题有什么关系?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-14
    • 1970-01-01
    • 1970-01-01
    • 2010-10-12
    • 2012-07-16
    • 1970-01-01
    相关资源
    最近更新 更多