因此,TYPE_SCROLL_INSENSITIVE结果集允许我在两个方向上滚动,而TYPE_FORWARD_ONLY只允许我向前移动。
既然TYPE_SCROLL_INSENSITIVE允许我做TYPE_FORWARD_ONLY允许的事情,为什么我需要TYPE_FORWARD_ONLY呢?我认为TYPE_FORWARD_ONLY可能更好的性能明智,但我想知道怎么做?
根据我的经验,在大多数情况下,您只需要在一个方向上读取数据。老实说,除了TYPE_FORWARD_ONLY
之外,我甚至从未使用过任何其他东西(除了在测试 JDBC 驱动程序实现时(。我知道它有时用于交互式 GUI 应用程序,提供可编辑的表视图,尽管即使对于这些类型的系统,我仍然会考虑不同的设计。
在一个方向上读取结果集有许多优点:
它- 非常简单,因此大多数数据库系统都支持它,而且通常非常快。
- 它的开销更少,因为服务器只需要提供一行一次,然后就可以忘记它
缺点:
- 您无法向后滚动或跳转到结果集中的"随机"点(恕我直言,我从来不需要它(
- 在某些数据库系统或驱动程序上(如 sForSujit 的 - 现已删除 - 答案所示(,需要完全读取仅转发结果集(否则驱动程序将在关闭时消耗其余结果集(
相比之下,滚动结果集的优点基本上是仅向前的缺点。
但是,可滚动结果集的缺点是:
- 更多的开销,因为服务器需要"记住"它以前提供的行,或者能够滚动/跳转(尽管有一些技巧可以减少开销以换取更多的复杂性(
- 并非所有数据库系统都支持它,这意味着它可能会被驱动程序"模拟"。这可能会导致额外的内存和网络开销(因为整个结果集被提取到内存中(。
- 根据滚动类型(尤其是类型敏感(,可能会逐个读取行,这会增加读取所有数据所需的往返次数(如果确实读取多个数据,则"随机"跳转结果集可能意味着检索到的其他数据被丢弃未使用(。
请注意,此列表可能不完整。