我正在使用JdbcTemplate.query(sql, args, rowMapper)方法调用来返回对象列表。在某些情况下,我想跳过一行而不将其添加到我返回的列表中。在这些情况下,我想到了两种解决方案:

  • 使RowMapper返回null。
  • 使RowMapper抛出异常(我知道处理了SQLException,所以这是一种可能)。

  • 我的问题是:当RowMapper.mapRow返回null时,JdbcTemplate是否将其添加到列表中?如果没有,我应该抛出SQLException吗?

    最佳答案

    这是将行添加到结果列表中的代码

    public class RowMapperResultSetExtractor<T> implements ResultSetExtractor<List<T>> {
        ...
        public List<T> extractData(ResultSet rs) throws SQLException {
            List<T> results = (this.rowsExpected > 0 ? new ArrayList<T>(this.rowsExpected) : new ArrayList<T>());
            int rowNum = 0;
            while (rs.next()) {
                results.add(this.rowMapper.mapRow(rs, rowNum++));
            }
            return results;
        }
        ...
    

    如我们所见,它确实会添加null。但是,除非其中有bug,否则没有理由RowMapper应该返回null。

    关于java - 当RowMapper返回null时,JdbcTemplate会做什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17434936/

    10-10 01:33