在基于屏幕的新式应用程序中,用户向后和向前滚动浏览数据。 对于此类应用程序,返回到之前检索的行是个问题。 一种可能性是关闭并重新打开游标,然后提取行,直到游标到达所需行。 另一种可能性是读取结果集,将其缓存在本地,并在应用程序中实现滚动。 这两种可能性仅适用于小结果集,而后者的可能性很难实现。 更好的解决方案是使用 可滚动的游标,该游标 可以在结果集中向后移动和向前移动。
可滚动游标通常用于基于屏幕的新式应用程序,用户通过数据来回滚动。 但是,仅当仅向前游标不会执行该作业时,应用程序才应使用可滚动游标,因为可滚动游标通常比仅向前游标更昂贵。
向后移动可引发不适用于仅向前游标的问题:可滚动游标是否可检测以前提取的行所做的更改? 也就是说,它是否应该检测更新、删除和新插入的行?
之所以会出现此问题,是因为结果集的定义(与特定条件匹配的行集)并未说明何时检查行以确定其是否符合条件,也未说明在每次提取时行是否必须包含相同的数据。 前一项遗漏使得可滚动游标能够检测是否已插入或删除行,而后者则允许它们检测更新的数据。
检测更改的能力有时很有用,有时不有用。 例如,会计应用程序需要一个忽略所有更改的光标。如果光标显示最新更改,则无法实现帐目平衡。 另一方面,航空公司预订系统需要一个游标来显示数据的最新更改;如果没有这样的游标,它必须不断地重新查询数据库以显示最新的航班可用性。
为了涵盖不同应用程序的需求,ODBC 定义了四种不同类型的可滚动游标。 这些游标在成本和检测结果集更改的能力上各不相同。 请注意,如果可滚动游标可以检测对行的更改,则只能在尝试重新引用这些行时检测这些更改;数据源无法通知游标对当前提取的行所做的更改。 另请注意,更改的可见性也由事务隔离级别控制;有关详细信息,请参阅 事务隔离。
本部分包含以下主题。