DataAccessException 与 SQLException

DataAccessException vs SQLException

我有两个与 Spring 框架中的异常处理相关的问题。

  1. 为什么 Spring 框架的 DataAccessException 是运行时异常,而核心 Java 的 SQLException 是检查异常?

  2. Spring的异常处理比Java的异常处理机制有什么优势?

使用 DataAccessException 而不是 SQLException 的原因是它更笼统地描述了问题。如果您的 Repository 或 DAO 接口有两种不同的实现,一种用于 Oracle,一种用于 Cassandra,您可以让这一个异常表示两种实现的失败。

至于为什么这是运行时异常而不是检查异常,它允许调用者不必显式处理它。根据我的经验,如果 SQLExceptionDataAccessException 被抛出,除了让它冒泡给有能力的人之外,我无能为力或不想做太多事情。必须在每一层声明 throwables 会给调用者带来更多负担。如果他们中有人想抓住并处理它,他们可以。

这是 JavaDocs(感谢@Tom!)

  1. DataAccesssException
  2. SQLException