【发布时间】:2019-06-29 21:31:19
【问题描述】:
当我尝试从 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 。这可能是一个问题。 我能用这个做什么?
【问题讨论】:
-
您是否尝试过升级到较新版本的 Oracle JDBC 驱动程序? ojdbc 不是一个版本:ojdbc6 表示它适用于 Java 6,而 ojdbc6 驱动程序的版本现在已经很老了。
-
我尝试使用 ojdbc7 和最新的 ojdbc8 并得到同样的错误。也许 rs.getSQLXML() 函数与 Oracle XMLType 不兼容,或者我需要在 sql 查询中做一些额外的更改?
标签: java sql oracle jdbc sqlxml