首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用DAOs的事务管理

使用DAOs的事务管理
EN

Stack Overflow用户
提问于 2012-05-29 03:16:27
回答 1查看 6.5K关注 0票数 4

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

EmployeeDAO类:

代码语言:javascript
复制
public class EmployeeDAO {
    String name;
    String empCode;
    int age;

    // Getters & Setters
}

BankDAO类:

代码语言:javascript
复制
public class BankDAO {
    String bankName;
    String acNo;
    String empCode;

    // Getters & Setters
}

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

如何在使用DAOs时管理这类事务?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-29 03:35:07

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

代码语言:javascript
复制
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();

例如:

代码语言:javascript
复制
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();
    }
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10792684

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档