Oracle中TYPE_FORWARD_ONLY结果集的行为及相关疑问
Oracle下JDBC结果集类型的行为说明
1. TYPE_FORWARD_ONLY在Oracle中的行确定时机
在Oracle JDBC驱动中,TYPE_FORWARD_ONLY配合默认的CONCUR_READ_ONLY(只读并发模式)时,遵循语句级一致性规则:
- 当执行
executeQuery()时,Oracle数据库会基于当前会话的隔离级别(默认是READ COMMITTED)创建一个查询开始时刻的数据快照。 - 后续调用
next()检索行时,所有返回的数据都来自这个快照:- 查询执行后新增的符合条件的行不会被包含到结果集中;
- 查询执行后已存在的符合条件的行,即使被其他会话修改或删除并提交,结果集中依然显示查询执行时刻的状态,不会读取修改后的数据,已删除的行也仍会被返回。
简单来说,行的范围和数据内容都是在查询执行时就确定的,检索过程只是从预先确定的快照中获取数据。
2. TYPE_FORWARD_ONLY对底层数据源变更的敏感性
从上述行为可以得出:TYPE_FORWARD_ONLY结果集在打开期间,对底层数据源的变更(新增、修改、删除)是不敏感的。这一点和TYPE_SCROLL_INSENSITIVE的核心行为一致,两者的主要区别仅在于游标移动能力——TYPE_SCROLL_INSENSITIVE允许任意位置的游标移动,而TYPE_FORWARD_ONLY只能向前移动。
注:如果使用CONCUR_UPDATABLE(可更新并发模式),TYPE_FORWARD_ONLY的行为会有所调整,但这种场景在实际使用中较少见,默认只读模式下遵循上述规则。
内容的提问来源于stack exchange,提问作者humbleCoder
相关产品推荐
相关产品推荐

