可用版本: Dev (3.21) | 最新 (3.20) | 3.19 | 3.18 | 3.17 | 3.16 | 3.15 | 3.14 | 3.13 | 3.12 | 3.11

异常处理

适用于 ✅ 开源版   ✅ 专业版   ✅ 企业版

受检异常与非受检异常

关于它们的优缺点已经被多次讨论,并且在今天这主要仍然是一个品味的问题。在这个主题中,jOOQ 明确地站在一边。jOOQ 的异常策略很简单

  • 所有“系统异常”都是非受检异常。如果在涉及业务逻辑的事务中间,你无法从丢失的数据库连接或表明你对数据库模型理解有误的约束冲突中合理地恢复。
  • 所有“业务异常”都是受检异常。业务异常是真正的异常,你应该处理(例如,没有足够的资金来完成交易)。其他语言可能具有 联合类型或 Monad 来实现相同的行为,减去异常的控制流影响。

使用 jOOQ,它很简单。jOOQ 的所有异常都是“系统异常”,因此它们都是非受检异常。

jOOQ 的 DataAccessException

jOOQ 使用自己的 org.jooq.exception.DataAccessException 来包装任何底层的 java.sql.SQLException。请注意,jOOQ 中大多数可能导致 DataAccessException 的方法都在 Javadoc 以及它们的方法签名中记录了这一点,即使这不是 Java 语言中非受检异常的要求。

DataAccessException 有多个子类型,如下所示

覆盖 jOOQ 的异常处理

以下关于 执行监听器 的部分记录了覆盖 jOOQ 异常处理的方法,如果你希望分别处理某些类型的约束冲突,或者如果你从数据库引发业务错误等。

反馈

您对此页面有任何反馈吗?我们很乐意听到您的意见!

The jOOQ Logo