2017-07-25 161 views
1

所以TYPE_SCROLL_INSENSITIVE结果集允许我在两个方向滚动,因为TYPE_FORWARD_ONLY只允许我前进。结果集TYPE_FORWARD_ONLY优于TYPE_SCROLL_INSENSITIVE的优点是什么?

由于TYPE_SCROLL_INSENSITIVE允许我执行TYPE_FORWARD_ONLY允许的操作,为什么我需要TYPE_FORWARD_ONLY呢?我认为TYPE_FORWARD_ONLY可能会更好地表现明智,但我想知道如何?

+0

这一切都在[JDBC教程](http://docs.oracle.com/javase/tutorial/jdbc/basics/retrieving.html)中讨论过,你知道的。 – EJP

+0

我已经通过该文档。但是,我无法找到我在那里询问的具体问题的答案。如果你能指出某些回答具体问题的东西,我将非常感激。 –

回答

3

根据我的经验,大多数情况下您只需要单向读取数据。说实话,我甚至从来不需要使用TYPE_FORWARD_ONLY以外的其他东西(除了在测试JDBC驱动程序时)。我知道它有时用在交互式GUI应用程序中,它提供了可编辑的表格视图,但即使对于这些类型的系统,我仍会考虑不同的设计。

阅读在一个方向的结果集具有许多优点:

  • 这是非常简单的,所以大多数数据库系统支持它,它通常是相当快
  • 它具有较少的开销,因为服务器只需要提供一次一排,然后可以忘掉它

缺点:

  • 你不能回滚或跳转到结果集中的'随机'点(可疑的恕我直言,我从来不需要它)
  • 在某些数据库系统或驱动程序上(如现在删除 - 由sForSujit ),只需要完全读取仅前向结果集(或者驱动程序将关闭其余部分)

相比之下,滚动结果集基本上具有与仅前向的缺点相同的优势。

然而

缺点可滚动的结果集:

  • 更多的开销,因为服务器需要“记住”行其附带以前,或者能够滚动/跳跃前进(虽然有减少的技巧该开销以换取更复杂性)
  • 并非所有的数据库系统都支持它,这意味着它可能会被驱动程序“模拟”。这可能会导致额外的内存和网络开销(因为整个结果集被提取到内存中)。
  • 根据滚动类型(特别是类型敏感),可能会逐行提取行,这会增加获取所有数据所需的往返次数(如果它获取多个,则“随机”跳跃结果集可能意味着检索到的附加数据被丢弃而未被使用)。

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