sql >> Databáze >  >> RDS >> Mysql

Správa transakcí s DAO

Pokud používáte prostý JDBC, můžete sdílet stejnou instanci Connection ve dvou instancích tříd DAO.

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

    ...
}

V klientském kódu musíte nejprve vytvořit Connection instance objektu. Dále musíte zahájit transakci pomocí conn.setAutoCommit(false); . Předejte Connection instance objektu do obou tříd DAO. Pokud se v žádné operaci nevyskytnou žádné chyby, conn.commit(); , jinak conn.rollback();

např.:

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


  1. Nejlepší a optimální způsob, jak spojit maximální hodnotu z jiné tabulky

  2. Existuje způsob, jak zachovat vztah db (pk/fk) v následujícím scénáři

  3. Nejlepší způsob, jak uložit pracovní dobu a efektivně ji dotazovat

  4. Seřazená vstupní hodnota vloží prázdný záznam do mysql