【原创】JDBC ResultSet分析
?
c1c2c31c11c21c32c12c22c33c13c23c3
?
?
?http://download.oracle.com/docs/cd/B10501_01/java.920/a96654/resltset.htm#1023642(Oracle9i JDBC Developer's Guide and Reference Release 2 (9.2))
?
1 楼 kimmking 2009-12-31 实际的各种jdbc实现,并非按照标准来的,特别是一些边边角角的参数配置等。以前看derby10.x的代码,看到很多选项里写着,暂不支持之类的东西。 2 楼 lt0604 2009-12-31 JDBC的实现根据厂商的不同而不同,以此概彼。如MS sql2000和2005驱动就很不同,还不能同时用 3 楼 siukeung 2009-12-31 同意楼上。
不过也学习咯。 4 楼 zhangxiaoming 2009-12-31 顶!
我个人感觉,最难掌握的是什么时候使用这些特性。
能否给出几个真实的使用场景。 5 楼 fuwang 2010-01-04 感谢楼主的试验。
我下两个结论,不知道对不对。
1)进行查询时,oracle会根据查询的sql把符合条件的数据进行缓存。至于INSENSITIVE还是SENSITIVE,这是要告诉数据库如何作缓存,INSENSITIVE是把全部数据缓存到cache,SENSITIVE是把每条记录的rowid缓存到cache中。
2)resultSetType是SCROLL还是默认的FORWARD_ONLY,都是jdbc自己的行为,不会影响oracle内部的处理过程。 6 楼 mercyblitz 2010-01-04 楼主的3 :ResultSet.TYPE_SCROLL_SENSITIVE例子并不能很好地证明结论。
原因如下:
1.例子环境并不是并发,你使用Sleep方法不能产生同步效应
2.例子中,数据的一致性那是事务的范畴。
3.例子中,你一条条地取即使是INSENSITIVE,都可能会是同步数据。
4.JDBC规范中,并没有规定非分布式Connection的实现机制,也就说Connection是使用的“拉”还是“推”的模式来同步数据,无论是“拉”还是“推”,使用Sleep都是不合适的。 7 楼 zhenkm0507 2010-01-04 mercyblitz 写道楼主的3 :ResultSet.TYPE_SCROLL_SENSITIVE例子并不能很好地证明结论。
原因如下:
1.例子环境并不是并发,你使用Sleep方法不能产生同步效应
2.例子中,数据的一致性那是事务的范畴。
3.例子中,你一条条地取即使是INSENSITIVE,都可能会是同步数据。
4.JDBC规范中,并没有规定非分布式Connection的实现机制,也就说Connection是使用的“拉”还是“推”的模式来同步数据,无论是“拉”还是“推”,使用Sleep都是不合适的。
mercyblitz,你好!你表达的意思,我不是很明白。我用sleep的原因是让程序生成ResultSet后,暂停取数,然后启动另一会话或事务去改掉数据库中的数据,然后检查原程序生成的ResultSet中取出的数据是否是新的。这和你说的“同步”好像没关系吧? 8 楼 zhenkm0507 2010-01-04 关于resultSetType, resultSetConcurrency, resultSetHoldability 这3个参数的实际使用,欢迎大家群策群力,积极回帖,共同提高嘛! 9 楼 zhenkm0507 2010-01-05 fuwang 写道感谢楼主的试验。
我下两个结论,不知道对不对。
1)进行查询时,oracle会根据查询的sql把符合条件的数据进行缓存。至于INSENSITIVE还是SENSITIVE,这是要告诉数据库如何作缓存,INSENSITIVE是把全部数据缓存到cache,SENSITIVE是把每条记录的rowid缓存到cache中。
2)resultSetType是SCROLL还是默认的FORWARD_ONLY,都是jdbc自己的行为,不会影响oracle内部的处理过程。
resultSetType是FORWARD_ONLY时,是不缓存数据的。经测试,ResultSet.TYPE_SCROLL_INSENSITIVE 、ResultSet.TYPE_SCROLL_SENSITIVE下,查询大批量数据会导致溢出,而FORWARD_ONLY不会。 10 楼 fuwang 2010-01-05 zhenkm0507 写道
resultSetType是FORWARD_ONLY时,是不缓存数据的。
是指oracle不缓存数据吗?
zhenkm0507 写道
经测试,ResultSet.TYPE_SCROLL_INSENSITIVE 、ResultSet.TYPE_SCROLL_SENSITIVE下,查询大批量数据会导致溢出,而FORWARD_ONLY不会。
这里的溢出是指什么,是oracle还是客户端的JVM? 11 楼 zhenkm0507 2010-01-06 fuwang 写道zhenkm0507 写道
resultSetType是FORWARD_ONLY时,是不缓存数据的。
是指oracle不缓存数据吗?
zhenkm0507 写道
经测试,ResultSet.TYPE_SCROLL_INSENSITIVE 、ResultSet.TYPE_SCROLL_SENSITIVE下,查询大批量数据会导致溢出,而FORWARD_ONLY不会。
这里的溢出是指什么,是oracle还是客户端的JVM?
我是在oracle下做的测试,是客户端的JVM溢出。