java - 数据访问对象 (DAO) 中的方法应该抛出还是捕获其异常?

标签 java spring jakarta-ee architecture dao

我在数据访问对象中有一个 Java 方法。这个非常简单的方法将两个整数值插入到数据库中。

public void saveHourMin(int hour, int min) throws SQLException{
psInsert.setInt(1, hour);
psInsert.setInt(2, min);
psInsert.executeUpdate();
}

这个方法,或者,一般来说,任何 DAO 方法,应该在抛出 SQLException 时抛出异常,还是应该捕获并记录异常,然后通过返回码通知用户?哪种方法适合使用 Spring 的应用程序?

最佳答案

你不能指望调用者持续检查返回码,你最好抛出异常。

如果你抛出 SQLException 那么那将是一团糟,你可能最终会得到更高的层次,或者在每个方法上添加“抛出异常”,或者只是吃异常。这两种选择都不好。

Spring 这样做的方式是提供一个异常转换器,该转换器接收原始 SQLException 并抛出包含原始 SQLException 作为原因的 RuntimeException 子类,并尝试提供尽可能多的有关错误的信息,包括使用供应商错误代码来决定抛出哪个特定子类。 如果您使用 Spring 的任何 jdbcTemplates,那么您将获得异常转换功能,因此您不需要在数据访问对象中包含任何异常捕获或抛出。

如果不想使用 Spring,可以在 DAO 中捕获 SQLException 并抛出 RuntimeException,包括原来的 SQLException 作为原因。对于大多数 SQLException,您无能为力,您只想快速失败并记录异常。

关于java - 数据访问对象 (DAO) 中的方法应该抛出还是捕获其异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15233276/

相关文章:

java - 我的 JDBC 连接可能有问题?

java - 为什么Java中没有多重继承,却允许实现多个接口(interface)?

java - 访问子级的数据并在父级测试类中使用它。

java - 将 Java 文件包含到 Coldfusion 中

spring - mybatis spring mvc 应用,得到 Invalid bound statement (not found)

java - 手动创建的多个数据源的事务管理

javascript - 如何通过Java检测浏览器中是否启用了javascript

java - 将 db-functionresult 映射到 jpa 实体属性

Java 事件处理程序命名约定

postgresql - JPQL EclipseLink 分页