gpt4 book ai didi

java - 使用 DAO 进行事务管理

转载 作者:可可西里 更新时间:2023-11-01 07:59:44 25 4
gpt4 key购买 nike

在我的 Java 应用程序的 DAO 层中,我有两个 DAO 类 EmployeeDAOBankDAO。我需要控制/处理他们的数据库事务。我使用连接池来获取数据库连接。

EmployeeDAO 类:

public class EmployeeDAO {
String name;
String empCode;
int age;

// Getters & Setters
}

BankDAO 类:

public class BankDAO {
String bankName;
String acNo;
String empCode;

// Getters & Setters
}

假设我要在两个数据库表中存储与该员工相关的员工和银行帐户详细信息。首先我保存员工,其次我保存银行详细信息,如果在存储银行详细信息时发生错误,我需要回滚完成交易。

如何在使用 DAO 时管理此类交易?

最佳答案

如果您使用普通 JDBC,您可以做的是在 DAO 类的两个实例中共享相同的 Connection 实例。

public class EmployeeDAO {

private Connection conn;

public void setConnection(Connection conn) {
this.conn = conn;
}

...
}

public class BankDAO {

private Connection conn;

public void setConnection(Connection conn) {
this.conn = conn;
}

...
}

在客户端代码中,首先需要创建一个Connection对象实例。接下来,您需要使用 conn.setAutoCommit(false); 启动事务。将 Connection 对象实例传递给两个 DAO 类。如果任何操作都没有发生错误,conn.commit();,否则,conn.rollback();

例如:

Connection conn = null;
try {
// getConnection from pool

conn.setAutoCommit(false);

EmployeeDAO employeeDAO = new EmployeeDAO();
employeeDAO.setConnection(conn);

BankDAO bankDAO = new BankDAO();
bankDAO.setConnection(conn);

// save employee

// save bank details

conn.commit();

catch(Exception e) {
if (conn != null) {
conn.rollback();
}
} finally {
if (conn != null) {
conn.close();
}
}

关于java - 使用 DAO 进行事务管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10792684/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com