@Spring:我写了一个Dao,用另一个id找到了一个id。当它获得数据时它很好,但是当找不到时会显示这样的异常。
org.springframework.dao.EmptyResultDataAccessException: Incorrect result size: expected 1, actual 0
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;
}
}
答案 0 :(得分:2)
我发现您的代码没有任何问题。 您要求JdbcTemplate为您查找单行,但是,您查询的merchantId可能不存在于数据库中。 queryForObject()只需要返回一行。最佳做法是在查询中附加“LIMIT 1”,以便返回不超过一行。
请阅读documentation reference。注意那里的Throws部分,如果结果集包含0行或1行以上,则抛出IncorrectResultSizeDataAccessException。
此外,请在此处阅读此post。