【问题标题】:is a RowSet object scrollable by default?默认情况下,RowSet 对象是可滚动的吗?
【发布时间】:2013-06-11 20:47:09
【问题描述】:

来自thisjava教程:

默认情况下,RowSet 对象是可滚动和可更新的,因此通过 使用结果集的内容填充 RowSet 对象,您可以 有效地使结果集可滚动和可更新。

然后来自this subsequentjava教程:

传递 ResultSet 对象

创建 JdbcRowSet 对象的最简单方法是生成一个 ResultSet 对象并将其传递给 JdbcRowSetImpl 构造函数。正在做 这不仅创建了一个 JdbcRowSet 对象,而且还填充了它 ResultSet 对象中的数据。

注意:传递给 JdbcRowSetImpl 的 ResultSet 对象 构造函数必须是可滚动的。

如果 RowSet 对象默认可滚动,为什么结果集需要可滚动? 这不是将 ResultSet 包装在 JdbcRowSet 中的主要优点吗?

更新:直接引用 JdbcRowSet 接口:

*JdbcRowSet 对象的主要用途之一是使 ResultSet 对象在没有这些对象时可滚动和可更新 能力。 *

引用同一个link

提前致谢。

【问题讨论】:

标签: java jdbc rowset


【解决方案1】:

JdbcRowSetImpl 是一个围绕Resultset 的相对较薄的包装器,因此它要求ResultSet 也可滚动以提供所需的可滚动性,如果您不想或不能提供一个可滚动的结果集,您可以使用 CachedRowSet

与您链接到的教程相反,com.sun.rowset.JdbcRowSetImpl 不会将不可滚动的 ResultSet 转换为可滚动的结果集。该实现简单地包装了ResultSet 并将调用直接转发给它,因此如果ResultSet 不可滚动,那么JdbcRowSet 也不能滚动。可更新性也是如此。

教程好像自相矛盾,因为在介绍后可以使用JdbcRowSet 使结果集可滚动,它指出:

使用ResultSet 对象创建的JdbcRowSet 对象用作ResultSet 对象的包装器。因为RowSet 对象rs 是可滚动和可更新的,所以jdbcRs 也是可滚动和可更新的。如果您在没有任何参数的情况下运行了 createStatement 方法,则 rs 将不能滚动或更新,jdbcRs 也不能。

(强调我的)

【讨论】:

  • 但是为什么在教程中它主要用作不可滚动且不可更新的结果集的包装器,而实际上要实例化 JdbcRowSet 您需要一个可滚动或可更新的 ResultSet 或两者都取决于您的需要?
  • 在问题中查看我的更新。
  • 本教程一般讲的是RowSet,但是如果你看一下具体的参考实现com.sun.rowset.JdbcRowSetImpl,它只是转发到简化的ResultSet。要使不可滚动的结果集可滚动,您需要CachedRowSet
  • 其实讲的是由一个JdbcRowSetImpl实现的JdbcRowSet接口
  • @Rollerball 我更新了我的问题,教程是错误的,更糟糕​​的是,它自相矛盾,正如你已经注意到的 ;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-21
  • 2013-04-09
  • 1970-01-01
  • 2015-09-03
  • 2012-11-26
  • 1970-01-01
相关资源
最近更新 更多