JDBC를 사용하여 트렌젝션을 처리할 때는 커밋을 설정하여 트렌젝션을 처리한다.
컨넥션 객체의 커밋 기본 설정은 true 이다. 즉, 쿼리를 데이터 베이스에 질의한 후 자동으로 commit 을 발생시킨다. 트렌젝션을 처리하기 위해서는 커밋 설정을 false 로 변경한 후 모든 쿼리가 끝나면 커밋을 발생시킨다. 하지만 오류나 예외가 발생할 때는 롤백(rollback) 을 시켜처리한다. 모든 과정이 끝났다면 컨넥션 객체의 기본 커밋 설정을 true로 돌려놓은 순으로 트렌젝션을 처리한다.
■ 트렌젝션을 처리하는 기본 코드
Connection conn = getConnection();
conn.setAutoCommit(false);
try {
쿼리 수행 시작
쿼리 수행 끝
conn.commit();
} catch (Exception e) {
conn.rollback();
} finally {
conn.setAutoCommit(true);
}
위의 경우는 컨넥션과 쿼리문이 하나의 객체의 메소드에 포함되어 있을 경우이다. 하지만 쿼리문을 수행하는 객체와 컨넥션을 얻는 객체가 다를 경우에는 컨넥션 객체를 매개변수로 쿼리문을 수행하는 객체에 전달해야 한다. 이 경우 트렌젝션의 처리는 다음과 같다.
■ 쿼리문을 수행하는 객체
public boolean insert(Connection conn, EmployeeBasicVo vo) {
PreparedStatement pst = null;
try {
pst = conn.prepareStatement(INSERT);
pst.setString(1, vo.getEmployeeCode());
pst.setString(2, vo.getEmployeeName());
pst.setString(3, vo.getPassword());
pst.setString(4, vo.getSocialFirst());
pst.setString(5, vo.getSocialSecond());
pst.setString(6, vo.getAccessLevel());
pst.setString(7, vo.getPostFirst());
pst.setString(8, vo.getPostSecond());
pst.setString(9, vo.getAddress());
pst.setString(10, vo.getEmail());
pst.setString(11, vo.getCellularFirst());
pst.setString(12, vo.getCellularSecond());
pst.setString(13, vo.getCellularThird());
pst.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
return false;
} finally {
if ( pst != null ) try { pst.close(); } catch(SQLException e){}
}
return true;
}
■ 컨넥션을 얻어 트렌젝션을 처리하는 객체의 메소드
public boolean insert(EmployeeBasicVo basicVo, EmployeeAddInfoVo addInfoVo) {
Connection conn = null;
try {
conn = getConnection();
conn.setAutoCommit(false);
try {
boolean isTransaction = basicDao.insert(conn, basicVo) && addInfoDao.insert(conn, addInfoVo);
if ( !isTransaction ) {
conn.rollback();
return false;
}
conn.commit();
} catch (Exception e) {
e.printStackTrace();
conn.rollback();
} finally {
conn.setAutoCommit(true);
}
} catch (Exception e) {
e.printStackTrace();
return false;
} finally {
if ( conn != null ) release(conn);
}
return true;
}
'자바(Java) > JAVA 2EE' 카테고리의 다른 글
서블릿에서 객체를 생성해 파라미터로 페이지로 전달하기 (0) | 2009.12.27 |
---|---|
MySQL 5.1 데이터베이스와 JDK1.6, 톰캣 6 버전 연동방법 (0) | 2009.12.26 |
트렌젝션 처리(Transaction Processing)이란 (0) | 2009.12.24 |
JSP에서 Ajax를 사용할 때 문자 인코딩 방법 (0) | 2009.12.23 |
자카르타(Jakarta) DBCP 사용 (0) | 2009.12.20 |