2013-05-06 34 views
5

我有一个SQL语句,我期望将返回一行,因为我传递的主键。所以我的选择是我应该抓住EmptyResultDataAccessException吗?

  1. 包裹queryForObject在一个try/catch,抓EmptyResultDataAccessException,并返回NULL
  2. 更改呼叫的queryForList,并解开列表和(希望)返回1号元素或null。

我在某处读了一个EmptyResultDataAccessException,因为它扩展了运行时异常,这是一个不好的做法。

但我看不出有什么问题。

我有兴趣听取意见

+0

如果你传递一个主键,那么它是如何返回空的? – 2013-05-06 20:08:19

+1

好吧,它不是,它不应该这样做。 “应该”是这里的关键词。 – EdgeCase 2013-05-06 20:27:33

回答

1

大部分时间我碰到这个(mvc/ws)我让异常被抛出,但在异常解析器中处理异常。返回null的问题在于,应用程序依赖于它并在更远的路上行进,并且您将不得不稍后进行空检查,而不是在预计到期时进行空检查。这可能会导致问题,因为并不是所有的开发人员都可能在需要时执行空检查,然后您可能会在稍后运行。根据您正在编写的应用程序类型,有几种方法可以使用异常解析器捕获和处理异常。通过使用异常解析器,您可以不同地处理每个异常并向用户提供反馈。

下面是使用spring mvc做到这一点的一种方法。这样,如果具有主键的对象不存在,则可以向用户发送一般消息。 http://www.mkyong.com/spring-mvc/spring-mvc-exception-handling-example/

1

我认为这是完全可以接受的捕获该异常。这是我所能记得的唯一一个Spring异常,但我有一些有效的用例来试图找到一条可能不存在的记录。