2013-05-06 62 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異常,但我有一些有效的用例來試圖找到一條可能不存在的記錄。