Java Spring JDBC:返回0或1行

Java Spring JDBC:返回0或1行,java,spring,jdbc,spring-jdbc,jdbctemplate,Java,Spring,Jdbc,Spring Jdbc,Jdbctemplate,我试图用谷歌搜索这个问题,但找不到:SpringJDBCTemplate中是否有一个推荐的方法,当我们希望返回0或1行时,应该使用这个方法。当没有返回行时,queryForObject()将引发异常。queryForList()需要遍历列表,但这不是问题。但我很好奇,对于返回的0行或1行,是否有首选/推荐的方法。谢谢 您列出的选项是唯一可用的选项。至少在Spring中有可选支持之前(请参阅): 向JdbcTemplate添加可选支持 有时,我发现自己正在处理可能返回任意一行的查询。我觉得Jdbc

我试图用谷歌搜索这个问题,但找不到:SpringJDBCTemplate中是否有一个推荐的方法,当我们希望返回0或1行时,应该使用这个方法。当没有返回行时,queryForObject()将引发异常。queryForList()需要遍历列表,但这不是问题。但我很好奇,对于返回的0行或1行,是否有首选/推荐的方法。谢谢

您列出的选项是唯一可用的选项。至少在Spring中有
可选
支持之前(请参阅):

向JdbcTemplate添加可选支持 有时,我发现自己正在处理可能返回任意一行的查询。我觉得JdbcTemplate目前没有很好地解决这个问题。目前的选择包括:

  • 使用#queryForObject并捕获EmptyResultDataAccessException
  • 使用#query或#queryForList并检查列表的大小
Java8选项非常适合这个问题

我个人会使用
queryForList
并检查
isEmpty()
,因为将逻辑放入catch中并不干净。

确实如此

DataAccessUtils.singleResult(jdbcTemplate.queryForList(...));

我相信这正是为这些情况而设计的。如果集合为空,则返回
null
,如果找到超过1个元素,则抛出
IncorrectResultSizeDataAccessException

谢谢krzyk,这是一个很好的信息,但在SpringJDBC中,DataUtils(正如Roman所建议的那样)也可以解决我的问题我在这里看到queryForList解决方案比DataUtils具有更好的优势,因为如果它错误地返回多行,您不希望程序抛出错误并以失败告终。我想知道为什么spring jdbc没有解决方案。。设计差距。。