2014-12-03 94 views
1

我有一个差不多点的问题,在未来(),以前的()&绝对的() 这些布尔方法的java.sql.ResultSet.next()描述

是否的位置光标变化,如果它返回false 例如: 1)柜面的下一个():

ResultSet rs = new Result(); 
    while (rs.next()) 
     System.out.println(rs.getInt(1)); 
    rs.next(); // it will return false but will the cursor be after after last ?! 

2)柜面的绝对():

ResultSet rs = new Result(); 
    rs.absolute(15); //assuming I've only 10 rows it will return false but will the cursor be advanced ? 

如果答案是只有当它们返回true才会改变,那么为什么有一种方法可以让我脱离行的范围,如afterLast()?

BTW我检查Java文档,我没有找到一个答案,我的问题...

回答

0

afterLast()可以用来强制排气口的RestulSet。另一种用法,如果ResultSet是scroallable,是与previous()方法向后遍历它:

ResultSet rs = ...; 
rs.afterLast(); 
while (rs.previous()) { 
    // do something. 
} 

诚然,我无法捉摸任何理由这样做,但它是可行的。

编辑:
关于这个问题,如果你在一个已经位于最后一排后ResultSet调用next()会发生什么 - 这取决于JDBC驱动程序的执行情况。一些司机只是默默地返回false并且不改变ResultSet的状态,而有些司机可能会因SQLException而失败。更具体地讲,做引用文档:

如果结果集类型为TYPE_FORWARD_ONLY,这是他们指定的JDBC驱动程序实现是否会返回false或在后续调用抛出SQLException下一个供应商。

+0

但是您还没有回答出现在代码注释中的主要问题? – 2014-12-03 20:16:14

+0

它被注释掉了;-)更严重的说明 - 请参阅我的编辑。 – Mureinik 2014-12-03 20:30:01

+0

@IslamSalah这种道德并不是要在代码中的注释中隐藏你的主要问题。或者确实有任何问题。 – EJP 2014-12-03 21:52:30