为什么我的SQL while(set.next())跳过第一个元素?

FaT*_*bez 1 java mysql loops jdbc

我执行:

select * from table_name order by column desc;
Run Code Online (Sandbox Code Playgroud)

我想按顺序浏览这些项目。我从中得到ResultSet并做到了:

while(set.next()) {
    // processing code
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,这跳过了第一个元素。遍历整个过程ResultSet并包含第一个元素的最佳方法是什么?

CJD*_*ood 7

我知道这确实很旧,但我的搜索击中了这里,并且在解决方案对我不起作用(仅转发结果集)之后,我相信这个问题从未真正得到解决。就我而言,我正在做:

jdbcTemplate.query(sql, rs -> {
    while(rs.next()) {
        // processRow
    }
    // no return statement
, args);
Run Code Online (Sandbox Code Playgroud)

然后,我更仔细地查看了被调用的方法,第二个参数是“RowCallbackHandler”而不是“ResultSetExtractor”,因此此代码的正确用法是:

jdbcTemplate.query(sql, rs -> {
    // processRow
}, args);
Run Code Online (Sandbox Code Playgroud)

这会为您执行“while (rs.next())”循环。我敢打赌OP正在做和我一样的事情。


dur*_*597 5

使用:

set.beforeFirst();
while(set.next()) {
    // Your code
}
Run Code Online (Sandbox Code Playgroud)

前进之前,这将运行循环主体一次ResultSet。您不想使用do循环(我先前的回答),因为如果查询返回0行,它将引发Exception。

  • 由于我在回答中所述的原因,并且 beforeFirst 可能会引发异常(请参阅文档),因此无需执行 set.beforeFirst() 。 (2认同)