먼저 간단히 설명을 드립니다.
Connection 클래스
- setAutoCommit(boolean) 메소드로 설정 및 해제
- true : 쿼리문 단위 처리
- false : 트랜잭션별 처리
- rollback() 메소드.
- commit() 메소드.
- AutoCommit(false) 기능 사용 후 setAutoCommit(true)를 해준다.
- getAutoCommit() 메소드로 auto-commit 모드의 상태를 확인 할 수 있다.
예)
Connection conn = null;
Statement stmt = null;
try {
conn = DatabaseManager.getConnection(url, id, password);
conn.setAutoCommit(false); //트랜잭션 활성화
stmt = conn.createStatement();
stmt.executeUpdate("insert into test values(1, 2, 3)");
conn.commit();
} catch (SQLException se) {
conn.rollback();
} finally {
conn.setAutoCommit(true);
stmt.close();
conn.close();
}
대략 이런식으로 사용하죠. 님께서는 일단 붉은 글씨로 표시한 부분에 주의해 주시구요.
Statement, PreparedStatement로 정의된 인스턴스를 중복해서 사용하는 것도 별로 좋은 방법이 아니라고 하네요. 중복사용 되고 있다면 1회 사용 후 close()를 실행해서 닫아준 후 다시 실행하는게 좋습니다.
중복 사용부분:
result = stmt.executeUpdate
("UPDATE accTran SET balance = balance - 50000 WHERE name = '김정은'");
result = stmt.executeUpdate
("UPDATE accTran SET balance = balance + 50000 WHERE name = '이명재'");
테스트를 할 수 없어서 정확한 결론을 내리기가 힘들지만 붉은글씨 부분과 중복사용 부분을 다시 한번 보아 주셨으면 합니다.
도움이 되기를 바라면서 이만 줄입니다.