我执行:
println("\nPretty JSON Result:\n" + prettyJson)
我想按顺序浏览这些项目。我从那里得到select * from table_name order by column desc;
并做了:
ResultSet
不幸的是,它跳过了第一个元素。迭代整个while(set.next()) {
// processing code
}
并包含第一个元素的最佳方法是什么?
答案 0 :(得分:4)
使用:
set.beforeFirst();
while(set.next()) {
// Your code
}
这会在推进ResultSet
之前运行循环体。您不想使用do
循环(我以前的答案),因为如果查询返回0行,它将抛出异常。
答案 1 :(得分:3)
您的代码是正确的,并且您没有丢失任何记录。在ResultSet的SDK文档中,您可以阅读:
" ResultSet对象维护一个指向其当前数据行的游标。 最初光标位于第一行之前。下一个方法将光标移动到下一行,因为当ResultSet对象中没有更多行时它返回false,它可以用于while循环迭代结果集。"
如果您在显示的结果之前执行resultSet.next(),则只有情况可能会丢失记录。
答案 2 :(得分:0)
每当调用next()时,它都会从结果集中读取记录。
if (!set.next() ) {
System.out.println("no data");
} else {
do {
//statement(s)
} while (resultSet.next());
}
答案 3 :(得分:0)
我知道这确实很老,但是我的搜索在这里找到,解决方案对我不起作用(仅转发结果集)后,我认为这个问题从未得到真正解决。就我而言,我在做:
jdbcTemplate.query(sql, rs -> {
while(rs.next()) {
// processRow
}
// no return statement
, args);
然后我仔细查看正在调用的方法,第二个参数是“ RowCallbackHandler”而不是“ ResultSetExtractor”,因此此代码的正确用法是:
jdbcTemplate.query(sql, rs -> {
// processRow
}, args);
这为您执行了“ while(rs.next())”循环。 我打赌OP会做与我相同的事情。