如何解决EmptyResultDataAccessException?

时间:2017-05-21 11:19:23

标签: spring

@Spring:我写了一个Dao,用另一个id找到了一个id。当它获得数据时它很好,但是当找不到时会显示这样的异常。

org.springframework.dao.EmptyResultDataAccessException: Incorrect result size: expected 1, actual 0

这是dao:

public Integer getIdByMerchantId(Integer merchantId) {
        String query = "SELECT id FROM transaction_history WHERE merchant_id=? ";
        try {
            return serviceJdbcTemplate.queryForObject(query, new Object[]{merchantId}, Integer.class);

        } catch (EmptyResultDataAccessException e) {
            log.error("Following query execution failed: ");
            log.error(Utils.getLoggerFriendlyQuery(query), merchantId);
            log.error("{} failed for merchant id {}. Error: {}", query, merchantId, e.getLocalizedMessage());
            return null;
        }
    }

1 个答案:

答案 0 :(得分:2)

我发现您的代码没有任何问题。 您要求JdbcTemplate为您查找单行,但是,您查询的merchantId可能不存在于数据库中。 queryForObject()只需要返回一行。最佳做法是在查询中附加“LIMIT 1”,以便返回不超过一行。

请阅读documentation reference。注意那里的Throws部分,如果结果集包含0行或1行以上,则抛出IncorrectResultSizeDataAccessException。

此外,请在此处阅读此post