bboks.net™

Java 트랜잭션 처리 본문

Java/Java

Java 트랜잭션 처리

bboks.net 2010. 8. 5. 09:30

트랜잭션(Transaction)은 All or Nothing 으로 표현되는 것으로 데이터베이스와 연동을 하는 어플리케이션에 있어서 아주 중요한 것이다. 데이터베이스와 연동된 모든 프로그램은 트랜잭션이 완벽히 보장되어야 한다.

JSP에서 제공하는 트랜잭션 처리에 대한 메소드들은 다음과 같다.

* 트랜잭션을 위한 메소드 : commit(), rollback()
JDBC API의 Connection 객체는 commit() 메소드와 rollback() 메소드를 제공한다. commit() 는 트랜잭션의 commit 을 수행하고, rollback() 메소드는 트랜잭션의 rollback 을 수행한다.

기본적으로 Connection 객체에 setAutoCommit(boolean autoCommit) 이란 메소드가 있는데 기본값이 true로 설정되어 있다. 기본적으로 JSP는 오토커밋(Autocommit)이다. 그래서 우리가 지금까지 작성한 쿼리문이 오토커밋(Autocommit)에 의해 자동으로 수행되었던 것이다.

그러나 트랜잭션을 처리할 때는 오토커밋(Autocommit)에 의해 자동으로 commit을 사용하면 안 된다. 여러 개의 쿼리 문장이 하나의 작업으로 수행되어야 하기 때문에 JSP의 오토커밋(Autocommit)이 자동으로 작동되지 못하게 해야 한다. 오토커밋(Autocommit)이 자동으로 작동되지 못하게 하려면 setAutoCommit(false); 로 지정해야 한다.

여러 작업을 하나의 트랜잭션으로 묶어서 처리하는 JSP의 예제는 다음과 같다.

Connection conn = null; 
try {
	conn = DriverManager.getConnection(url,dbId,dbPwd);
	conn.setAutoCommit(false); //트랜잭션 처리를 위해서 AutoCommit을 중지한다.

	//.... 데이타내의 수정문(Insert, Update, Delete) 등을 수행
	//.... 데이타내의 수정문(Insert, Update, Delete) 등을 수행
	//.... 데이타내의 수정문(Insert, Update, Delete) 등을 수행
	//.... 데이타내의 수정문(Insert, Update, Delete) 등을 수행

	conn.commit(); //데이타 처리시 에러가 없다면 commit 수행

}catch(SQLException e) {
	e.printStackTrace();

	if( conn != null ) {
		try {
			conn.rollback(); //에러발생시 rollback 처리
		} catch(SQLException sqle) {

		}
	}
}
finally {
	try {
		conn.setAutoCommit(true); //트랜잭션 처리를 기본상태로 되돌린다. 

		if( pstmt != null ) {
			pstmt.close();
		}

		if( conn != null ) {
			conn.close();
		}
	} catch (SQLException sqe) {

	}
}

 

[출처] [JAVA] 트랜잭션 처리