使用jdbc查询抛出异常

时间:2018-04-12 20:05:45

标签: java spring spring-mvc

我有以下存储库方法:

@Override
public List<Item> getItemsByName(String name) {
    String sql = "SELECT * FROM ITEMS WHERE NAME = :name";
    Map<String, Object> params = new HashMap<>();
    params.put("name", name);
    return jdbcTemplate.query(sql, params, new ItemMapper());
}

现在我想在用户传递不存在的项名时抛出ItemsNotFoundException。我该怎么办?当query()方法返回空列表或为null时,我应该抛出异常:

List<Item> items = jdbcTemplate.query(sql, params, new ItemMapper());
if (items == null || items.isEmpty()) {
    throw new ItemsNotFoundException();
}
return items;

或者,当我得到DataAccessException时,我应该抛出此异常:

try {
    return jdbcTemplate.query(sql, params, new ItemMapper());
} catch (DataAccessException e) {
    throw new ItemNotFoundException();
}

1 个答案:

答案 0 :(得分:4)

传入不存在的名称不会产生DataAccessException,因此无效。对于查询的空结果没有什么特别的。

但是,如果结果为空,为什么还要抛出异常?这是一个例外的情况(即,有人会搜索不存在的名称的错误)?如果是这样,这是一种有效的方法。在一般意义上,空列表可能会更好。