Spring JDBC - .queryForObject()返回太多结果?

时间:2016-04-23 21:30:37

标签: java spring jdbc

我有这个SQL语句:

float (li[:(round(li)*0.3)])

由于我正在使用.queryForObject,我希望得到一个或没有结果。相反,我得到的结果超过1,这会抛出IncorrectResultSizeDataAccessException异常。有什么想法吗?

2 个答案:

答案 0 :(得分:2)

方法queryForObject(sql, rowMapper, args)(和所有重载)明确声明如果查询返回多于1行,则抛出IncorrectResultSizeDataAccessException,或者不返回任何内容:

  

抛出:IncorrectResultSizeDataAccessException - 如果查询没有返回一行

在您的情况下,由于查询SELECT * FROM materials WHERE title = ?可以返回超过1行,因此您有两种选择:

  • 使用query(sql, rowMapper, args)方法代替,它返回List个元素而不只是一行。然后,您可以使用它仅检索第一个元素(如果列表不为空)。
  • 调整查询,使其通过限制结果返回单行。

答案 1 :(得分:0)

如果查询仅返回一行,则还可以使用WHERE ROWNUM = 1子句。

这将使您免于例外-但您需要谨慎:

  • 结果可能是不确定的,
  • 它可以在您的应用中隐藏问题
  • 让数据损坏不被注意。