如何解决SpringBatch中的org.springframework.dao.EmptyResultDataAccessException

时间:2013-07-22 13:12:41

标签: java

springframework.dao.EmptyResultDataAccessException在尝试从sql server数据库中选择数据时,这里是我编写的代码。任何人都可以建议如何使用查询界面从数据库中选择数据吗?

public int getRedempRequestId(RedemptionResponseBean redemptionResponse)
        throws ParseException {
    final Timestamp redempIdFromCsv = getRedeemDate(redemptionResponse);
    int participantId = redemptionResponse.getOcpEventMemberId();
    System.out.println(redempIdFromCsv);
    System.out.println(participantId);

    int res = jdbcTemplate.queryForInt("SELECT RR.REDEMPTION_REQUEST_ID "
            + "FROM  dbo.REDEMPTION_REQUEST RR WITH (NOLOCK)"
            + "WHERE RR.SENT_DATE = ? AND "
            + "RR.OEDEF_OCP_EVENT_MEMBER_ID = ? ", new Object[] {
            redempIdFromCsv, participantId });
    System.out.println(res+"-----------");
    return res;
}

有人能告诉我这里有什么问题吗?

1 个答案:

答案 0 :(得分:8)

如果您希望不返回任何数据,则不应使用jdbcTemplate.queryForInt(...),因为该方法需要执行的查询返回一个整数值。基本上,这就是EmptyResultDataAccessException告诉你的内容;它的Javadoc说:

  

当预期结果至少有一行(或元素)但实际返回零行(或元素)时,抛出数据访问异常。

相反,您应该使用query(...)中的JdbcTemplate方法之一,它允许返回零行。