7

什么情况下需要 try catch ? 数据库增删改需要吗

 2 years ago
source link: https://www.v2ex.com/t/816710
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

V2EX  ›  程序员

什么情况下需要 try catch ? 数据库增删改需要吗

  kikione · 3 小时 52 分钟前 · 614 次点击
8 条回复    2021-11-20 11:01:49 +08:00

zjsxwc   3 小时 50 分钟前

事务套 crud 中,commit rollback 时肯定要

markgor   3 小时 41 分钟前

1 、偷懶的情況下,如表單驗證,直接 throw 個錯誤,catch 後返回統一的錯誤格式;2 、事務下,try.....submit;catch..rollback

markgor   3 小时 39 分钟前

漏了一個,3 、函數返回 int 類型時,有些失敗會返回 null ,而我喜歡 throw

yousabuk   3 小时 27 分钟前 via iPhone

不 try catch 程序会制造垃圾数据的时候,会崩溃的时候。

eason1874   3 小时 25 分钟前

不可控的输入,比如解密一段密文,格式错误、密文错误、编码错误,逐个判断太累人try catch 一把梭,一次定生死

darksword21   3 小时 24 分钟前 via iPhone

用 go 就不会有这个烦恼了!

zmxnv123   3 小时 14 分钟前

fail safe

crclz   2 小时 52 分钟前

异常处理原则如下,对无 gc 语言都适用:

1. go 和 java 的异常处理思路( exception vs errorcode )没有本质区别

2. 异常代表了 ExecutionFailure ,代表了 exceptional 。execution failure = exceptional.
ref: https://docs.microsoft.com/en-us/dotnet/standard/design-guidelines/exception-throwing
如果这种情况并非 exceptional ,那么请以 errorcode 返回(或者 xxresult )。
评价:如果你对异常和 errorcode 两种等价的形式的应用场景不明白,那么这一条可以指导你。

3. 吞调异常代表了未知到已知的转换。(未知:exceptional 。吞掉:catch 而不 rethrow )
解释:catch 而不 rethrow 代表了:对于被调函数,这种情况是 exceptional 的,但是对于调用者来说不是。

4. 不忽略未知异常。
翻译:不 catch Exception ,而是 catch SomeException 。
理由:未知异常代表着潜在的 bug 。
例外:根异常捕获器需要 catch Exception ,但是如果是未知的异常,需要通过报警系统通知开发者。

5. catch 、rethrow 、打印日志是正交的概念。
示例 1:rethrow+打日志代表了遇到了 exceptional 的情况,并且想要记录一些诊断信息。
示例 2:只 catch 不 rethrow+打日志代表了遇到了意料之中的错误,并且想要记录一些诊断信息。


对于楼主的问题,以下是具体回答:

在我们公司,数据库驱动层会打日志(和 metrics ),以跟踪具体库的成功率指标,提升可监控性。
开发者如果想要获得面向业务的监控指标,那么需要自己 catch+打日志(+metrics )。(因为一个业务操作可能涉及多个数据源、多次查询)
那么,catch+打日志后是返回 errorcode 还是 rethrow ?请参考 1-5.


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK