在Java中,为什么ResultSet不允许你运行next()超过1次?

时间:2013-04-18 01:28:35

标签: java database resultset

看看这段代码:

ResultSet results=preparedStmt.executeQuery();

while (results.next()){
   String subject=results.getString(1);
   System.out.println(subject +" 1st time");
}

while (results.next()){
   String subject=results.getString(1);             
   System.out.println(subject+ " 2nd time");
}

为什么系统只在第一次打印出结果,&不会在第二次打印出结果?

如果我们想运行results.next()超过1次,那么什么是正确的代码方式?

2 个答案:

答案 0 :(得分:3)

您没有运行.next()一次。单个while循环将多次运行,直到到达结果集的末尾。当达到第二个while循环时,结果集中没有任何内容可以继续:你就在它的末尾。您必须再次运行查询才能重新开始或生成scrollable resultset

       Statement stmt = con.createStatement(
                                      ResultSet.TYPE_SCROLL_INSENSITIVE,
                                      ResultSet.CONCUR_UPDATABLE);
       ResultSet rs = stmt.executeQuery("SELECT a, b FROM TABLE2");
       // rs will be scrollable, will not show changes made by others,
       // and will be updatable

并致电rs.first()

答案 1 :(得分:1)

while( rs.next() )会将“当前行”光标前进到集合的末尾。

默认情况下,ResultSet仅为只读和转发,因此一旦到达最后,您需要先调用first()重新开始。注意:first()是一种可选方法,您的驱动程序可能不支持。