繁体   English   中英

NamedParameterJdbcTemplate 返回可选<Integer>

[英]NamedParameterJdbcTemplate return Optional<Integer>

有没有办法从 NamedParameterJdbcTemplate 返回 Optional?

我的查询有时会返回空。 所以我想要检查空虚的美丽方式。 我不想尝试捕获 EmptyResultDataAccessException 因为这有点难看。

据我了解,您的问题似乎是您的ResultSet有时可能完全为空,所以这不是关于返回为null的值,而是首先没有任何结果,因此您为什么提到EmptyResultDataAccessException 在我的回答中,我将假设您只对第一个结果感兴趣,否则它真的没有意义。

NamedParameterJdbcTemplate没有可用的直接方法,但您可以使用 lambdas 来实现。 具体来说,您可以获取所有结果的列表,然后使用stream().findAny()获取Optional

或多或少,它会是这样的:

Optional<Integer> values = namedParameterJdbcTemplate.queryForList(...)
    .stream()
    .map(m -> (Integer)m.get("MY_COLUMN"))
    .findAny();

在执行上述操作时,您可能希望限制查询将返回的结果数量,否则可能会给网络和服务器内存带来过多压力。 根据数据库技术,有像LIMITOFFSET这样的 SQL 子句(Postgres 见https://www.postgresql.org/docs/8.1/queries-limit.htmlhttps://dev.mysql.com/doc/ refman/5.5/en/limit-optimization.html for MySQL)来帮助您完成任务。

然而需要注意的是,如果您的查询首先返回多行,您实际上是在丢弃一些数据,因此假设您首先做错了可能更安全(换句话说:您必须确保您的查询将始终返回零或一个结果)。


假设您总是只有一行和一列,但返回值为空,获取Optional的最简单方法是将调用包装在Optional.ofNullable 示例(伪代码,只是为了获取要点):

Optional<Integer> v = Optional<Integer>.ofNullable(namedParameterJdbcTemplate.queryForObject(...));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM