如何处理从 ResultSet 返回 0、1 或 2 行的情况

How to handle case where 0, 1, or 2 rows are returned from ResultSet

我有一个 ResultSet resultSet 可能 return 执行查询中的 0、1 或 2 行。

Map<String, Integer> results = new HashMap<>();
if (!resultSet.next()){
     // handle case where there are no rows
     results.put("count1", 0)
     results.put("count2", 0)
}
else {
     resultSet.beforeFirst();
     while (resultSet.next()) {
     // handle case where there are 1 or 2 rows
     results.put(resultSet.getInt("column1") == 0 ? "count1" : "count2", resultSet.getInt("column2"));
     }
}

当没有行或只有 1 行时,我得到这个异常 org.springframework.dao.EmptyResultDataAccessException: Incorrect result size: expected 1, actual 0。我的 if 条件不应该处理任何行吗?我的 else 条件不应该也处理 1 行吗?我的其他条件能够处理 2 行。

问题最终是我如何从另一个 class 调用查询。我正在使用 QueryExecutor 方法 queryForObject 期望返回单个结果,所以当我执行查询并且没有返回任何行时,EmptyResultDataAccessException 被抛出。当我把方法改成query,那么:

while (resultSet.next()) {
     results.put(resultSet.getInt("column1") == 0 ? "count1" : "count2", resultSet.getInt("column2"));
}

没有任何问题,因为如果没有行,while 循环将不会执行。