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

标签 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 。这可能是这里的一个问题。 我能用这个做什么?

最佳答案

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

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

xdb.jar 可以从同一个地方下载 as the base driver

xmlparserv.jar 应该是 somewhere in your Oracle installation .

关于java - 如何使用 java.sql 包中的 rs.getSQLXML() 函数从 Oracle 数据库获取 XMLType 列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56820993/

相关文章:

java - 如何在java中的正则表达式模式末尾分割字符串

c# - sql 查询表达式中的语法错误(缺少运算符)

mysql - 以下哪种 SQL 方法是最佳的?

sql - Oracle SQL-在一个选择中选择(在同一表上!)

sql - 如何合并 2 个具有不同值的重复表?

java - 如果 ORA-02049 包含在分布式事务中,对 "just change your program"的良好响应是什么?

java - 具有工作负载身份的 Google Cloud Java SDK?

java - 传递给构造函数的组件不显示

java - 使用依赖项目进行 Maven 构建

database - 当一列从varchar变成nclob时Oracle开始做全表扫描