这是一个奇怪的问题。我知道我犯了一个小错误,但却无法弄明白究竟是什么。
我正在执行一个查询,它有结果集。首先,我验证它是否没有记录,然后将其中一个DTO属性设置为false。如果它有记录,那么迭代并做一些事情。
rs = partyPreparedStatement.executeQuery();
if(!rs.next()) { // It has records, but I'm checking with ! operator to make sure it goes to false or true.
purchaseDto.setPOIssued(false);
} else {
while (rs.next()) { // It has records, but still its not going to execute business
// Do some business here.
break;
}
}
设计是否正确?
答案 0 :(得分:1)
您将光标移动两次,而不是使用do{}while
循环:
if (!rs.next()) {
purchaseDto.setPOIssued(false);
} else {
do {
// Do some business here.
break;
} while (rs.next());
}
答案 1 :(得分:1)
如果返回 数据,则忽略第一行。
第一次调用next()
已经将ResultSet定位到第一行(如果有数据)。但是你没有对该行做任何事情,你立即再次调用next()
(在while
条件下),从而完全忽略第一行。
你如何解决这个问题是一个品味问题。我个人只会计算处理的行数:
如果您只想处理第一行,则开始时不需要一段时间:
rs = partyPreparedStatement.executeQuery();
if (rs.next()) {
purchaseDto.setPOIssued(true);
// process the data here
} else {
purchaseDto.setPOIssued(false);
}
答案 2 :(得分:0)
将值默认设置为false
,并将循环设置为true
purchaseDto.setPOIssued(false);
while (rs.next()) { // It has records, but still its not going to execute business
// Do some business here.
purchaseDto.setPOIssued(true);
break;
}