Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Transaktionsmanagement mit DAOs

Wenn Sie einfaches JDBC verwenden, können Sie dieselbe Instanz von Connection gemeinsam nutzen in den beiden Instanzen der DAO-Klassen.

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;
    }

    ...
}

Im Client-Code müssen Sie zuerst eine Connection erstellen Objektinstanz. Als nächstes müssen Sie die Transaktion mit conn.setAutoCommit(false); starten . Übergeben Sie die Connection Objektinstanz zu den beiden DAO-Klassen. Wenn bei keiner Operation Fehler auftreten, conn.commit(); , andernfalls conn.rollback();

zB:

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();
    }
}