我们以"select name,age from person"为例
TYPE_SCROLL_INSENSITIVE的结果集是数据库中的cache,也就是上面说的虚拟表,和真实的数据库数据是分离的.
这里在数据库中有一个cache,它保存中查询出来的name,age,和原表脱离.
TYPE_SCROLL_SENSITIVE在数据库中也有一张虚拟表,但cache的内容不同.它cache的是记录的rowid(这只是一个名词,不是oracle的rowid)
简单说它保存的是查询到的记录在实际数据库中的索引.当rs.next()时,数据库再根据next定位的rowid却数据库中真实地获取.
即每一次next,数据库都会 select name,age from person where rowid = 当前rowid;
所以如果在查询的时候记录被更新,内容就真实地反映到前端的java的结果集中了.
但是insert操作是新增rowid,并不在cache的rowid中.所以不影响前端的结果集.
而delete操作,一般而言,因为只是在记录上做了一个标记,并没有真正删除记录,对于数据库底层的
select name,age from person where rowid = 当前rowid;而言还是可以取得数据.这一点可以用程序验证出来.