Spring JDBC:返回 0 或 1 行
Posted
技术标签:
【中文标题】Spring JDBC:返回 0 或 1 行【英文标题】:Spring JDBC: Returning 0 or 1 rows 【发布时间】:2016-10-07 18:22:43 【问题描述】:我试图用谷歌搜索这个问题,但找不到:Spring jdbcTemplate 中是否有推荐的方法,当我们期望返回 0 或 1 行时应该使用该方法。当没有返回行时,queryForObject() 将抛出异常。 queryForList() 将需要遍历列表,但这不是问题。但我很好奇是否有返回 0 或 1 行的首选/推荐方法。谢谢!
【问题讨论】:
【参考方案1】:有
DataAccessUtils.singleResult(jdbcTemplate.queryForList(...));
我相信这正是针对这些情况而设计的。如果集合为空,则 will 返回 null
,如果找到超过 1 个元素,则抛出 IncorrectResultSizeDataAccessException
。
【讨论】:
我想知道为什么spring jdbc没有解决这个问题..设计差距..【参考方案2】:您列出的选项是唯一可用的。至少在 Spring 支持 Optional
之前(请参阅 this bug report):
为 JdbcTemplate 添加可选支持
有时我发现自己正在处理可能会返回任何一个而没有行的查询。我觉得 JdbcTemplate 目前还没有很好地解决这种情况。当前选项包括:
使用 #queryForObject 并捕获 EmptyResultDataAccessException 使用 #query 或 #queryForList 并检查列表的大小Java 8 Optionals 非常适合解决这个问题。
我个人会使用queryForList
并检查isEmpty()
,因为将逻辑放入catch 中并不干净。
【讨论】:
谢谢 krzyk,这是很好的信息,但在 Spring JDBC 中,DataUtils(如 Roman 所建议的那样也应该可以解决我的问题) 我在这里看到 queryForList 解决方案与 DataUtils 相比具有更好的优势,因为如果错误地返回多行,您不希望您的程序抛出错误并突然结束..以上是关于Spring JDBC:返回 0 或 1 行的主要内容,如果未能解决你的问题,请参考以下文章
Spring04-SpringEL&Spring JDBC数据访问
JDBC getUpdateCount 在 SQL Server 中返回 0,但更新了 1 行