结果集TYPE_FORWARD_ONLY比TYPE_SCROLL_INSENSITIVE有什么优势?

时间:2017-07-25 07:41:25

标签: java jdbc resultset

因此,TYPE_SCROLL_INSENSITIVE结果集允许我向两个方向滚动,而TYPE_FORWARD_ONLY只允许我向前移动。

由于TYPE_SCROLL_INSENSITIVE允许我执行TYPE_FORWARD_ONLY允许的操作,为什么我需要TYPE_FORWARD_ONLY?我认为TYPE_FORWARD_ONLY可能是更好的性能,但我想知道如何?

1 个答案:

答案 0 :(得分:4)

根据我的经验,大多数情况下您只需要向一个方向读取数据。说实话,我甚至不必使用除TYPE_FORWARD_ONLY以外的任何东西(测试JDBC驱动程序实现时除外)。我知道它有时用在交互式GUI应用程序中,提供可编辑的表视图,尽管我仍然会考虑不同的设计,即使对于那些类型的系统。

在一个方向上读取结果集有许多优点:

  • 这很简单,因此大多数数据库系统都支持它,而且通常很快
  • 它的开销较小,因为服务器只需要提供一次行,然后可以忘记它

缺点:

  • 您无法向后滚动或跳转到'随机'结果集中的点数(可疑恕我直言,我从未需要它)
  • 在某些数据库系统或驱动程序上(如 - 现在已删除 - sForSujit的回答所示),需要完全读取前向结果集(或者驱动程序将在关闭时使用其余的结果集) )

相比之下,滚动结果集基本上只有前向的缺点。

可滚动结果集的缺点是:

  • 服务器需要记住'它之前提供的行,或者能够向前滚动/跳转(尽管有一些技巧可以减少开销以换取更多复杂性)
  • 并非所有数据库系统都支持它,这意味着它可能会被模拟'由司机。这可能会导致额外的内存和网络开销(因为整个结果集被提取到内存中)。
  • 根据滚动类型(特别是类型敏感),可能会逐行获取行,这会增加获取所有数据所需的往返次数(如果它确实获取多次,则跳转'随机地通过结果集可能意味着检索到的其他数据被丢弃未使用)。

请注意,此列表可能不完整。