9

假设有一个ResultSet rswithn对象。

这段代码:

while(rs.next()) {
   // do something on rs
}

在算法上等于此代码(即两者都给出相同的结果):

for(i=1; i<=n; i++) {
   rs.absolute(i)
   // do something on rs
}

但这在通篇上是等价的吗?第一个更快吗?或者,对于给定i的 rs.next() 只是rs.absolute(i+1)?

最好的问候 MC

4

2 回答 2

6

rs.next需要一种更简单的数据库游标 ( FORWARD_ONLY),rs.absolute因此在大多数情况下,您将降低性能/资源效率rs.absolute。在某些情况下,无论如何都没有对FORWARD_ONLY游标进行优化,您可能会获得相同的性能。

一些驱动程序甚至可能允许absolute调用FORWARD_ONLY,验证请求的记录是下一个记录,但其他驱动程序可能再次抛出异常。

于 2012-12-19T14:31:27.010 回答
2

前者rs.next()可能更快,尽管它取决于底层实现,实际上由于内部优化,您可能会获得相同的性能。

驾驶员在这样做时可能没有考虑当前位置rs.absolute(),它可能有一点点开销,而rs.next()只是向前移动。

因此,如果您需要遍历所有结果,只需使用rs.next(),如果您需要跳到特定结果,请使用rs.absolute().

请记住,结果集实际上通常由数据库远程处理(除非它是 a CachedResultSet),因此来回处理可能比您想象的要多。

于 2012-12-19T14:33:45.997 回答