有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我有一个ResultSet resultSet可以从执行的查询中潜在地返回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行。我的else状态可以处理2行


共 (1) 个答案

  1. # 1 楼答案

    问题在于我是如何从另一个类调用查询的。我使用了QueryExecutor方法queryForObject,该方法期望返回一个结果,因此当我的查询执行且没有返回行时,EmptyResultDataAccessException被抛出。当我将方法更改为query时,然后:

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

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