不使用Java验证结果集大小

时间:2017-09-12 10:45:24

标签: java jdbc

这是一个奇怪的问题。我知道我犯了一个小错误,但却无法弄明白究竟是什么。

我正在执行一个查询,它有结果集。首先,我验证它是否没有记录,然后将其中一个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;
    }                
}

设计是否正确?

3 个答案:

答案 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;
    }