在我的Java应用程序的DAO层中,我有两个DAO类EmployeeDAO和BankDAO。我需要控制/处理他们的数据库事务。我使用连接池来获取数据库连接。
EmployeeDAO类:
public class EmployeeDAO {
String name;
String empCode;
int age;
// Getters & Setters
}BankDAO类:
public class BankDAO {
String bankName;
String acNo;
String empCode;
// Getters & Setters
}假设我将在两个数据库表中存储与该雇员相关的员工和银行帐户详细信息。首先我保存员工,第二我保存银行详细信息,如果在存储银行详细信息时发生错误,我需要回滚完成事务。
如何在使用DAOs时管理这类事务?
发布于 2012-05-29 03:35:07
如果使用普通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();
}
}https://stackoverflow.com/questions/10792684
复制相似问题