Spring mvc 使用JdbcTemplate从数据库检索数据时,如何处理EmptyResultDataAccessException?

Spring mvc 使用JdbcTemplate从数据库检索数据时,如何处理EmptyResultDataAccessException?,spring-mvc,Spring Mvc,当我要检索数据库中不存在的数据时,我遇到以下异常。我正在使用spring并使用JdbcTemplate来完成这项工作。我想在这种情况下得到空值。有谁能给我一个解决这个问题的办法吗 Exception in thread "main" org.springframework.dao.EmptyResultDataAccessException: Incorrect result size: expected 1, actual 0 at org.springframework.dao.suppor

当我要检索数据库中不存在的数据时,我遇到以下异常。我正在使用spring并使用JdbcTemplate来完成这项工作。我想在这种情况下得到空值。有谁能给我一个解决这个问题的办法吗

Exception in thread "main" org.springframework.dao.EmptyResultDataAccessException: Incorrect result size: expected 1, actual 0
at org.springframework.dao.support.DataAccessUtils.requiredSingleResult(DataAccessUtils.java:71)
at org.springframework.jdbc.core.JdbcTemplate.queryForObject(JdbcTemplate.java:806)
at com.hojat.LibSpringMVCProject.DAO.BookDAO.getBookById(BookDAO.java:24)
at com.hojat.LibSpringMVCProject.service.BookService.getBookById(BookService.java:24)
at com.hojat.LibSpringMVCProject.service.TestService.main(TestService.java:37)

假设我想从数据库中检索id为的记录,在我的数据库中id为101,所以我想检索101个细节,当我运行程序时,o/p将生成如下所示

cid:101
cname:abhi
caddr:hyd
如果您试图从数据库中检索数据,而数据库中不存在数据,则将生成以下异常

结果大小不正确:预期为1,实际为0


发生此异常的原因可能只有两个,第一个是错误的数据访问,第二个是数据库中不存在但您正在尝试访问的数据,就是这样。

如果您希望从此查询返回null,您应该尝试捕获异常,如下图所示:

    //Assuming your querying for varchar column
    String sqlSelect = "SELECT QUERIED_COLUMN 
    FROM YOUR_TABLE WHERE YOUR_CONDITION = ?";
    try {
        return getJdbcTemplate().queryForObject(sqlSelect, 
        new Object[] {yourParam}, String.class);
    } catch (EmptyResultDataAccessException e) {
        return null;
    }

@伊瓦洛的想法是对的。捕获异常,然后只返回null。但是,老实说,我认为抛出异常是发出没有从数据库返回数据的信号的最愚蠢的方式,因为没有找到数据根本不是异常情况。我可以检查返回的结果集是否为null或空,以查看是否没有数据,我不需要昂贵的异常来告诉我这一点。