gpt4 book ai didi

java - NamedParameterJdbcTemplate 返回可选

转载 作者:行者123 更新时间:2023-12-01 19:25:15 26 4
gpt4 key购买 nike

有没有办法从NamedParameterJdbcTemplate返回Optional?

我的查询有时会返回空。所以我想要一种漂亮的方法来检查是否为空。我不想对 EmptyResultDataAccessException 进行 try catch,因为这有点难看。

最佳答案

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

NamedParameterJdbcTemplate 中没有可用的直接方法,但您可以使用 lambda 来实现。具体来说,您可以获取所有结果的列表,然后使用 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.html;对于 MySQL,请参见 https://dev.mysql.com/doc/refman/5.5/en/limit-optimization.html)来帮助您完成任务。

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

<小时/>

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

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

关于java - NamedParameterJdbcTemplate 返回可选<Integer>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59318576/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com