Spring JDBC:返回0或1行

时间:2016-06-07 18:04:30

标签: java spring jdbc spring-jdbc jdbctemplate

我试图谷歌这个问题,但找不到:在我们期望返回0或1行时,应该使用Spring jdbcTemplate中的推荐方法。 queryForObject()将在没有返回任何行时抛出异常。 queryForList()将需要遍历列表,但这不是问题。但我很好奇是否有返回0或1行的首选/推荐方法。谢谢!

2 个答案:

答案 0 :(得分:14)

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

我认为这完全是针对这些情况而作出的。如果集合为空,则will返回null,如果找到的元素超过1,则返回IncorrectResultSizeDataAccessException

答案 1 :(得分:3)

您列出的选项是唯一可用的选项。至少在Spring中有Optional支持之前(参见this bug report):

  

向JdbcTemplate添加可选支持

     

我不时会发现自己正在处理可能返回任何一行的查询。我觉得JdbcTemplate目前没有很好地解决这种情况。目前的选择包括:

     
      
  • 使用#queryForObject并捕获EmptyResultDataAccessException
  •   
  • 使用#query或#queryForList并检查列表的大小
  •   
     

Java 8 Optionals非常适合此问题。

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