如何处理从 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 循环将不会执行。
我有一个 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 循环将不会执行。