[답변]트랜잭션 예제 0 760

by 안병훈 [2006.11.08 18:05:41]


먼저 간단히 설명을 드립니다.

 

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 = '이명재'");

 

테스트를 할 수 없어서 정확한 결론을 내리기가 힘들지만 붉은글씨 부분과 중복사용 부분을 다시 한번 보아 주셨으면 합니다.

 

도움이 되기를 바라면서 이만 줄입니다.