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

时间:2017-04-28 15:15:33

标签: java xml oracle jdbc resultset

尝试使用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时出现问题,引发了诸如“无法形成插入语句”和“不合适”之类的错误类型“

有没有解决方法?

1 个答案:

答案 0 :(得分:0)

我找到了解决方案......

似乎OracleCachedRowSet基类OracleWebRowSet

中没有正确设置行集编写器和阅读器

因此,要解决此问题,请在调用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();