当前位置: 首页 > 知识库问答 >
问题:

NamedParameterJdbcTemboard返回可选

窦哲彦
2023-03-14

是否有任何方法可以从NamedParameterJdbcTemplate返回可选的?

我的查询有时会返回空。所以我想要漂亮的方法来检查空。我不想做尝试捕捉空结果数据访问异常,因为这个有点丑。

共有1个答案

方博
2023-03-14

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

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

多多少少会这样:

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

在执行上述操作时,您可能希望限制查询将返回的结果数量,否则可能会给网络和服务器内存带来过度压力。根据数据库技术,有SQL子句,如LIMITOFFSET(请参阅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<Integer> v = Optional<Integer>.ofNullable(namedParameterJdbcTemplate.queryForObject(...));
 类似资料:
  • 虽然运行与SQL查询相同的查询并获取结果,但在ifCurrent中未获取任何结果。 我是否传递了错误的参数? 这就是在学校里通过的

  • 在Spring的NamedParameterJdbcTemplate中。如何使用Spring版本3.1查询以执行“Select*from Student”以返回列表,而不提供任何参数。x 根据http://docs.spring.io/spring/docs/3.1.2.RELEASE/javadoc-api/org/springframework/jdbc/core/namedparam/Nam

  • 我试图模拟一个对象,该对象返回一个带有Mockito的Java可选对象: 当被调用,它返回。 我希望方法返回 返回的任何原因? 方法如下: 以下是Junit:

  • 问题内容: 如何通过使用和避免返回值? 例: 问题答案: 要返回可选值的值,或者返回默认值(如果可选值没有值),则可以使用。 请注意,我重写了查找最长名称的代码:您可以直接与比较器比较每个String的长度。可以通过调用键提取器作为方法引用来获得一个这样的比较器。

  • 我知道你不能从返回,所以这个例子不起作用: 其中,可以返回有效字符串或空可选字符串。我所做的工作是: 这是更长的,并没有太大的不同,只是检查空值摆在首位。我觉得必须有一个更简洁的方式使用可选。

  • 我注意到,如果没有where(),returning()操作不可用。这是故意的吗? 这项工作: 这不起作用: 我应该考虑这个“黑客”吗?