ResultSet to CachedRowSet



我正在尝试从ResultSet转换为CachedRowSet/CachedRowSetImpl。填充方法后,ResultSet似乎为空,但CachedRowSet也是如此。我一直在到处寻找,尝试不同的方法(包括工厂(。下面是一个代码片段,其中包含正在发生的事情的一些指示。

class ResultSetMapper implements RowMapper<CachedRowSet>{
@Override
public CachedRowSet map(ResultSet rs, StatementContext ctx) throws SQLException {
//CachedRowSet crs = RowSetProvider.newFactory().createCachedRowSet(); 
System.out.println(rs.getLong("something")); -> This gets printed
CachedRowSetImpl crs = new CachedRowSetImpl();
crs.populate(rs);
System.out.println(crs.getInt("something"); -> ArrayIndexOutOfBoundsException (mostly -1, sometimes returning 0)
System.out.println(rs.getLong("something")); -> This doesn't get printed
System.out.println(crs.size()); -> 0
return crs;
}
}

对此问题的任何帮助或见解将不胜感激!

编辑:通过一些调试,我发现CachedRowSet不为空。RowSetMD.colCount = 3。它还具有正确的标签。这不会改变问题,但可以确保我不是在空对象上调用 getter。这使得问题更难掌握

CachedRowSet::populate方法读取ResultSet中的所有行。此时,无法再调用rs.next().您应该使用csr.next().

class ResultSetMapper implements RowMapper<CachedRowSet>{
@Override
public CachedRowSet map(ResultSet rs, StatementContext ctx) throws SQLException {
CachedRowSet crs = RowSetProvider.newFactory().createCachedRowSet();
crs.populate(rs);
while (csr.next()) {
System.out.println(crs.getInt("something"));
}
// ...
return null;
}
}

相关内容

  • 没有找到相关文章

最新更新