假設我有一個存儲過程在數據庫中插入一行到表中。如果我嘗試插入違反表中主鍵約束的行,數據庫顯然會拋出異常。現在,我是否應該在數據庫級別處理這個異常,還是可以將異常發送給客戶端並在那裏處理呢?哪一個是首選和更好的做法?我應該在數據庫端還是客戶端捕獲異常?
0
A
回答
1
雖然我同意由衣衫襤褸的問題確實涵蓋了在數據庫中存在約束背後的原因,但我不認爲它完全回答了您的具體問題,因爲它不包括如何處理生成的異常來自數據庫。
所以,我認爲答案是「這取決於」。
如果您接受來自客戶端的輸入並嘗試使用此SP插入它,但SP內沒有生成任何其他數據,那麼是的,您應該向客戶端拋出某種異常,因爲您的SP無法處理此事件異常和不良數據來自客戶端。
即不會捕獲您無法處理的異常。
在另一方面,如果SP本來是問題的原因 - 讓我們說,它會產生一些形成INSERT
的部分數據,這是這個數據造成的問題,你實際上可以從中恢復 - 然後抓住它,恢復,客戶端不需要知道任何事情;如果您無法恢復,那麼通過一切手段,您可以在此處拋出異常(或者一些更廣義的異常,在記錄原始之後)回到客戶端,因爲您無法做更多的事情。
順便說一句,在對象驗證中擁有數據庫模式中存在的相同約束的「軟」版本沒有什麼問題 - 因爲模式中的任何更改都需要對映射對象進行更改,這很有意義(無論如何)將您在數據庫中定義的關係和結構約束視爲映射對象模型必須遵守的契約。
相關問題
- 1. 在客戶端捕獲異常消息
- 2. 我應該做API請求服務器端還是客戶端?
- 3. 應該在客戶端還是在服務器端處理OCR?
- 4. 應該在服務器端還是客戶端訂購陣列
- 5. REST API請求應該是客戶端還是服務器端?
- 6. 我應該在服務器還是客戶端上傳送/ crosstab db數據?
- 7. 我應該在Akka流中使用同步httpclient還是異步http客戶端?
- 8. 在客戶端獲取Fault異常
- 9. 客戶端捕獲Web服務用戶異常[Java 6.0.17]
- 10. 我應該使用https請求還是ajax向客戶端發送數據?
- 11. 如何在node.js中捕獲http客戶端請求異常
- 12. 在客戶端永遠不會捕獲故障異常
- 13. 搜索過濾器,我應該做客戶端還是服務器端?
- 14. 異常的Web客戶端
- 15. WCF REST客戶端異常
- 16. 告知控制器捕獲的異常的客戶端/視圖
- 17. WPF客戶端不會捕獲WCF的自定義異常
- 18. Vaadin 7.1.8未被捕獲的客戶端異常
- 19. IOException異常的HTTP錯誤代碼捕獲客戶端返回
- 20. SOAP客戶端應用程序異常
- 21. 我的Amazon S3客戶端是同步還是異步?
- 22. Oracle數據庫客戶端
- 23. asp.net捕獲客戶端時間並將其插入數據庫
- 24. ViewModel類設計 - 它應該在服務器端還是客戶端?
- 25. 直接從Windows客戶端訪問數據庫 - 好還是壞?
- 26. 一個大的數據庫,還是每個客戶端?
- 27. 客戶端無法接收數據 - 客戶端中的socket.async_receive異常
- 28. 我應該在服務器上還是在客戶端上存儲Cookie
- 29. 的Nginx +乘客 - 在PassengerServer客戶端線程未捕獲的異常
- 30. WPF MultiLanguage應該從SERVER(WCF)還是客戶端讀取資源?
Duplicate:http://stackoverflow.com/questions/464042/should-you-enforce-constraints-at-the-database-level-as-well-as-the-application – rags