我正在使用JdbcTemplate.query(sql, args, rowMapper)
方法调用来返回对象列表。在某些情况下,我想跳过一行,而不是将其添加到我返回的列表中。在这些情况下,我想到了两个解决方案:
我的问题是:当RowMapper.mapRow
返回null时,JdbcTemplate会将其添加到列表中吗?如果没有,我应该抛出SQLException吗?
答案 0 :(得分:8)
这是将行添加到结果列表
的代码段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。但是,除非存在错误,否则没有理由为什么RowMapper应该返回null。
答案 1 :(得分:1)
当你返回null然后它确实将这个null添加到列表中,同样,如果你抛出一个SQLException,它会被“包装”在扩展RuntimeException的Exception中,因为你不必显式包含try-catch语句,如果你不想。
答案 2 :(得分:0)
使用RowMapper填充后,您只需从列表中删除null。
rows = JdbcTemplate.query(sql, args, rowMapper);
rows.removeAll(Collections.singletonList(null));