文章目录
前言
虽然目前我们大多使用Mybatis、JPA进行数据操作,但是在特殊情况下,我们还是可能通过JDBCTemplate继续对数据库进行操作的。前天在项目开发中,使用JDBCTemplate进行开发时发现一个异常。
问题重现
就是如果使用JDBCTemplate.queryForObject进行查询数据,如果查询数据为空(null)时会抛出异常。
org.springframework.dao.IncorrectResultSizeDataAccessException: Incorrect result size: expected 1, actual 2
问题分析:
通过追查源码发现是因为,在源码中方法返回结果判断时如果为空就抛出throw new EmptyResultDataAccessException(1);
异常;
如果返回值的数量大于1 的时候也会抛出:throw new IncorrectResultSizeDataAccessException(1, results.size());
的异常。
但是我想要的功能就是如果数据库为空那就返回空,而不是抛出异常。
源码:
@Nullable
public <T> T queryForObject(String sql, @Nullable Object[] args, RowMapper<T> rowMapper) throws DataAccessException {
List<T> results = (List)this.query((String)sql, (Object[])args, (ResultSetExtractor)(new RowMapperResultSetExtractor(rowMapper, 1)));
return DataAccessUtils.nullableSingleResult(results