来自this java教程:
默认情况下,RowSet对象是可滚动和可更新的,因此 使用结果集的内容填充RowSet对象,即可 有效地使结果集可滚动和可更新。
然后从this subsequent java教程:
传递ResultSet对象
创建JdbcRowSet对象的最简单方法是生成一个 ResultSet对象并将其传递给JdbcRowSetImpl构造函数。干 这不仅创建了一个JdbcRowSet对象,而且还填充了它 ResultSet对象中的数据。
注意:传递给JdbcRowSetImpl的ResultSet对象 构造函数必须是可滚动的。
如果RowSet对象默认可滚动,为什么结果集需要可滚动? 这不是将ResultSet包装在JdbcRowSet中的主要优势吗?
更新:直接引用JdbcRowSet接口:
* JdbcRowSet对象的一个主要用途是使ResultSet对象可滚动和可更新,否则它们没有那些 能力。 *
引用相同的link。
提前致谢。
答案 0 :(得分:2)
JdbcRowSetImpl
是一个 - Resultset
周围相对较薄的包装器,所以它要求ResultSet
也可以滚动,以便能够提供所需的可滚动性,如果不这样做的话想要或不能提供可滚动的结果集,您可以使用CachedRowSet
。
与您链接的教程相反,com.sun.rowset.JdbcRowSetImpl
不会将不可滚动的ResultSet
转换为可滚动的结果集。实现只是包装ResultSet
并直接将调用转发给它,因此如果ResultSet
不可滚动,那么JdbcRowSet
也不是。同样适用于可更新性。
本教程似乎是矛盾的,因为在介绍之后你可以使用JdbcRowSet
使结果集可滚动,它注意到:
使用
JdbcRowSet
对象创建的ResultSet
对象充当ResultSet
对象的包装器。因为RowSet
对象rs是可滚动和可更新的,所以jdbcRs
也是可滚动和可更新的。如果您运行方法createStatement
没有任何参数,rs
将无法滚动或更新,jdbcRs
也不会。
(强调我的)