调用 acceptChanges() 时无法将 OracleWebRowSet 转换为 CachedRowSetImpl

OracleWebRowSet cannot be cast to CachedRowSetImpl when calling acceptChanges()

尝试使用 OracleWebRowset 导出和导入 ResultSet 个对象。

参考“https://docs.oracle.com/cd/B28359_01/java.111/b31224/jcrowset.htm#BABCFJBE

OracleWebRowSet rs = new OracleWebRowSet();
System.setProperty("javax.xml.parsers.SAXParserFactory","oracle.xml.jaxp.JXSAXParserFactory");
FileReader fReader = new FileReader("xmlfile.xml");
rs.readXml(fReader);
rs.acceptChanges();
rs.close();

这引发了错误:

java.lang.ClassCastException: oracle.jdbc.rowset.OracleWebRowSet cannot be cast to com.sun.rowset.CachedRowSetImpl
    at com.sun.rowset.internal.CachedRowSetWriter.writeData(CachedRowSetWriter.java:275)
    at oracle.jdbc.rowset.OracleCachedRowSet.acceptChanges(OracleCachedRowSet.java:1776)

尝试施放基本 WebRowSetImpl() 无济于事

我不能使用基本 WebRowSet 的原因是因为 oracle NVARCHAR2 列在写入和读取 XML 时出现问题,引发了 "can't form insert statements" 和 "not a proper type"

有什么解决办法吗?

我找到了解决方案...

似乎行集编写器和 reader 在 OracleWebRowSet

OracleCachedRowSet 基 class 中设置不正确

因此,要解决此问题,请在调用 acceptchanges() 方法之前添加两行代码

rs.setReader(new OracleCachedRowSetReader());
rs.setWriter(new OracleCachedRowSetWriter());

因此固定代码如下所示:

OracleWebRowSet rs = new OracleWebRowSet();
System.setProperty("javax.xml.parsers.SAXParserFactory","oracle.xml.jaxp.JXSAXParserFactory");
FileReader fReader = new FileReader("xmlfile.xml");
rs.readXml(fReader);
rs.setReader(new OracleCachedRowSetReader());
rs.setWriter(new OracleCachedRowSetWriter());
rs.acceptChanges();
rs.close();