如何使用java.sql包中的rs.getSQLXML()功能从Oracle数据库中获取XMLType列?

时间:2019-06-29 21:31:19

标签: java sql oracle jdbc sqlxml

当我尝试从Oracle数据库获取XMLType列时出现错误:

java.sql.SQLException: Invalid column type

问题出在rs.getSQLXML(1)函数中。

我的代码:

Connection conn = null;
String dbURL = "jdbc:oracle:thin:@localhost:1521:xe";
String user="user";
String pw = "pww";

try {
    Class.forName("oracle.jdbc.driver.OracleDriver");
    conn = DriverManager.getConnection(dbURL,user,pw);
} catch (Exception e) {
    System.out.println(e);
}

Statement stmt = null;
String query = "select e.doc from XMLTABLE e";
try {
    stmt = conn.createStatement();
    ResultSet rs = stmt.executeQuery(query);
    while (rs.next()) {
        SQLXML sqlxml = rs.getSQLXML(1);
        String xml1= sqlxml.getString();


        System.out.println(xml1);
    }
} finally {
    if (stmt != null) { stmt.close(); }
}

我的数据库:

CREATE TABLE XMLTABLE (
    id NUMBER(4),
    doc XMLTYPE
);

我知道还有其他方法可以通过修改后的查询来获取XMLType列,例如rs.getOPAQUE(1)rs.getCLOB(1)。但是我需要使用 rs.getSQLXML(1)函数。

我使用ojdbc6版本。

编辑:

我尝试使用ojdbc8并调试了ojdbc8代码,并且有这样的内容:

            OPAQUE var2 = (OPAQUE)this.getOracleObject(var1);
            return var2 == null ? null : (SQLXML)var2;
        } catch (ClassCastException var3) {
            throw (SQLException)((SQLException)DatabaseError.createSqlException(this.getConnectionDuringExceptionHandling(), 4).fillInStackTrace());
        } 

并返回java.lang.ClassCastException: oracle.xdb.XMLType cannot be cast to java.sql.SQLXML。这可能是这里的一个问题。 我该怎么办?

1 个答案:

答案 0 :(得分:0)

JDBC驱动程序本身并未提供使用JDBC XML API所需的一切。

您需要其他库以及基本驱动程序jar:xdb.jar和and xmlparserv.jar

xdb.jar可以从同一位置as the base driver下载

xmlparserv.jar应该是somewhere in your Oracle installation