TYPE_SCROLL_SENSITIVE问题

			Class.forName("org.postgresql.Driver");
			connection = DriverManager.getConnection("jdbc:postgresql://192.168.1.103:5432/postgres", "postgres", "**");
			statement = connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);

			resultSet = statement.executeQuery("select * from student order by id");

ResultSet.TYPE_SCROLL_INSENSITIVE

返回的结果集对数据库中的的数据变动是不敏感的。可以这么认为,当拿到结果集时,已经把数据库库中满足条件的所有记录都取了出来,放在缓存中,如果此时有另一个线程将数据库中的数据更改了,也不会影响这个结果集中的数据,因为它用的是缓存中的。

ResultSet.TYPE_SCROLL_SENSITIVE

与此对应,它返回的结果集是敏感的,那么是不是意味着拿到结果集后,数据库中的数据变化都会反映到结果集中呢?不是这样的,这里此时拿到的结果集只是某种条件的记录的id,当打印结果集中数据的时候,根据id再临时到数据库中取,那么对于拿到结果集后,数据库中的数据被更新了(update),肯定是会被反映到结果集上的,但是对于插入(insert)操作,由于新插入的记录的id并没有被结果集缓存,所以不会反映到结果集中,对于删除操作(delete),因为数据库中的删除操作只是对被删除的记录做一个标记,使之不被被检索到,实际的数据并没有被删除,而实际缓存的  是id的实际偏移,所以删除操作也不会被反映到结果集上。


参考:http://blog.csdn.net/axman/article/details/3984103

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值