IT모아

JDBC 에서의 트랜잭션 처리 본문

JSP

JDBC 에서의 트랜잭션 처리

아롱사태남 2014.03.17 13:15


트랜잭션(Transaction)은 여러 단계의 작업을 하나로 처리하는 것으로, 하나로 인식된 작업이 모두 성공적으로 끝나면 commit이 되고,

하나라도 문제가 발생하면 rollback 되어서 작업을 수행하기 전단계로 모든 과정이 회수된다.


이것이 트랜잭션이다. 즉, 트랜잭션은 프로그램의 신뢰도를 보장하게 된다.


JSP에서도 트랜잭션 처리에 대한 메소드들을 제공한다. 


대표적인 예가 쇼핑몰에서 물건을 구매하는 과정이다. 물건을 장바구니에 넣은 후, 구매를 누르면 구매의 단계가 이루어 지는데 먼저 구매할 물건을

선택하고 개인정보를 입력하고, 결제를 하게 되는데, 이들 단계 중 하나라도 잘못되면 모든 과정이 처음 장바구니로 돌아간다.

이것은 트랜잭션에 의해 구매 과정의 신뢰도를 보장하기 위한 것이다.


기본적으로 Connection 객체에 setAutoCommit(boolean) 이란 메소드가 잇는데 기본값이 true로 설정되어 있다. 기본적으로 JSP는

오토커밋(Autocommit)이다. 그래서 우리가 지금까지 작성한 쿼리문이 오토커밋에 의해 자동으로 수행되었던 것이다.

그러나 트랜잭션을 처리할 때는 오토커밋에 의해 자동으로 commit을 사용하면 안된다. 여러개의 쿼리 문장이 하나의 작업으로 수행되어야 하기

때문에 JSP의 오토커밋이 자동으로 작동되지 모하게 해야 한다. 오토커밋이 자동으로 작동되지 못하게 하려면 setAutoCommit(false) 로 지정해야 한다.


예제)

Connection con = null;


try {

con = DriverManager.getConnection(url,name,pw);

con.setAutoCommit(false);    // 트랜잭션 처리를 위해서 AutoCommit을 중지한다.


stmt_idx = 0;    // preparedStatement에서 입력할때는 순서를 정한다 그래서 stmt_idx 라는 변수에 0을 담았다

sqlb.delete(0, sqlb.capacity());      // delete란 start에서 end까지를 처리한다. 즉 0번째부터 StringBuffer를 반환 한다는 뜻이다.  ==> 초기화

sqlb.append("INSERT INTO MEMBER(A,B,C,D)");

sqlb.append("VALUES(?,?,?,?)");

stmt = con.prerparedStatement(sqlb.toString());  stmt는 preparedStatement 이고 SQL문을 String으로 변환하여 컨넥션 하겠다는 뜻


stmt.setString(++stmt_idx , A);  ==> prepareStatement에 입력하겠다는것이고 파라미터를 해서하면 한개씩 쯩가하는 위치에 A를 넣겠다는것임

stmt.setString(++stmt_idx , B);

stmt.setString(++stmt_idx , C);

stmt.setString(++stmt_idx , D);

stmt.executeUpdate();

con.comit();   // 데이터 처리시 에러가 없다면 commit 수행


catch(SQLException e) {

e.printStackTrace();


try {

    if (con != null) {


    con.rollback();    // 컨넥션이 안될시 롤백 처리 하겠다는 것임.

} catch (SQLException sqle) {}


}

} finally {

   try {

con.setAutoCommit(true);    // 끝으로 트랜잭션 처리르 기본상태로 되돌린다는 뜻이다.

if (stmt != null) stmt.close();

if ( con != null)  con.close();



} catch (SQLException sqle) {}


}



}

'JSP' 카테고리의 다른 글

MultipartReqest 정리  (0) 2014.03.26
커넥션풀의 정의  (0) 2014.03.26
JDBC  (0) 2014.03.17
StringBuffer 클래스  (0) 2014.03.17
Statement (execute / executeQuery / executeUpdate) 차이  (0) 2014.03.17
JDBC 에서의 트랜잭션 처리  (0) 2014.03.17
0 Comments
댓글쓰기 폼