2016-09-22 157 views
0

我正在開發一個Spring MVC應用程序。我有一個DAO,服務和控制器。在Dao中,我有一個查詢數據庫以返回Sql行集的方法。我檢查SQL行集是空的,如果是,我拋出一個運行時異常。另外,根據應用程序的邏輯,對數據庫的查詢應返回至少一行。所以,基本上我假設,如果我得到一個空的SQL行集,那麼有一些問題,可能是數據庫損壞或類似的東西。處理數據庫異常

這是檢查未知異常的正確方法。或者,我應該返回SQL行集,因爲它是服務?當服務使用此sql行集時,可能會導致空指針異常。

問題是如果我在dao中拋出異常,我不能在測試用例中覆蓋那部分。意思是我必須把db放在不一致的狀態下才能執行和測試異常處理部分。

+0

http://stackoverflow.com/questions/6546875/collections-emptylist-instead-of-空檢查 –

回答

1

DAO層不應該關注業務規則。它應該簡單地抽象數據操作,以便服務層不需要關心存儲數據的方式和位置。

在我看來,DAO應該簡單地返回一個空的結果集。服務層知道該如何處理空的結果集,因爲服務層通常是存儲業務邏輯的地方。

1

不,更一般地說,您不應該因爲您目前沒有這種情況或要求而在您的應用程序中引入限制。如果數據庫中沒有任何行,那麼您的數據庫可能只是空的......或者您可能正在對該模式進行測試,並且它目前是空的。你這樣做違反了道的關注。

此外不要擔心數據庫,這是沒有意義的。如果你不能接受你正在工作的工具運行正常,那麼你將無法構建任何東西。如果要處理數據庫的異常都有一個控制器,它捕捉這些異常並重定向到一個視圖顯示錯誤信息:

@ControllerAdvice 
public class ErrorHandler { 
    @ExceptionHandler(DataAccessException.class) 
    public String handleDatabaseException(DataAccessException ex) { 
     return "error"; 
    } 

    @ExceptionHandler(CannotCreateTransactionException.class) 
    public String handleAccessException(CannotCreateTransactionException ex) { 
     return "database_error"; 
    } 
}