[ 트랜잭션 ]
1. 트랜잭션 이란?
- 하나의 논리적인 작업 단위 == 트랜잭션
- 하나의 논리적인 작업 단위 모두가 완료(성공) - 커밋
- 하나의 논리적인 작업 단위 모두가 완료 X - 롤백
예) 계좌 이체 = 1) + 2) 모두 성공하면 커밋, 하나라도 실패하면 롤백
1) A -> 돈을 인출
2) B -> A의 돈을 입금
2. Java에서 트랜잭션 처리 예시
트랜잭션 처리 전 예시)
위의 코딩을 실행시키면 deptno가 중복되는 값이 추가되려고 하기 때문에 1) 작업이 실행이 되어 INSERT가 되어지고 2) 작업은 에러가 발생한다.
오라클 디벨로퍼에서 데이터를 확인해 보면 1) 작업 후 INSERT가 된 것을 확인할 수 있다.
1), 2) 작업이 모두 완료했을 때만 COMMIT 될 수 있도록 트랜잭션 처리를 해보자
트랜잭션 처리한 예시)
Connection 객체에서 AutoCommit을 설정한 후 작업이 완료되면 commit을 하고 그렇지 않으면 예외가 발생하니 예외처리 부분에 rollback을 시켜주면 된다.
3. BoardService에서 트랜잭션 처리하기
트랜잭션 처리는 Connection 객체에서 얻어와 할 수 있는데 BoardService에는 Connection 객체가 없다.
BoardDAOImpl에서 Connection를 얻어오는데 getter가 없어서 객체를 얻어오지 못하기 때문에 getter를 생성해 주어야 한다.
getter 생성 후 BoardService에서 BoardDAO를 필드로 선언했기 때문에 다운캐스팅을 한 후 BoardDAOImpl에 있는 getter로 Connection 객체를 얻어와서 사용해야한다.
Connection 객체는 main에서 실행시 종료시키면 닫히기 때문에 트랜잭션 처리가 완료되면 AutoCommit을 원상태로 돌려놔야 한다.
[ CallableStatement ]
- CallableStatement : 저장 프로시저를 사용하는 Statement
예시1) emp 테이블에 사원을 추가하는 up_insertemp 저장프로시저 선언 후 CallableStatement를 사용해서 사원 추가하기
[ 저장 프로시저 생성 ]
[ main ]
구조는 거의 비슷하나 sql 문이 다르다.
{ call 저장프로시저명 } 이렇게 작성한다.
예시2) up_updateDept 저장 프로시저 생성 : 부서 정보를 수정
[ 저장 프로시저 생성 ]
[ main ]
예시3) up_deleteDept 저장 프로시저 생성 : 부서 정보를 삭제
[ 저장 프로시저 생성 ]
[ main ]
'TIL > JDBC' 카테고리의 다른 글
[SIST] JDBC_days06 (0) | 2022.05.11 |
---|---|
[SIST] JDBC_days05_페이징 처리하기 (0) | 2022.05.10 |
[SIST] JDBC_days04 (0) | 2022.05.09 |
[SIST] JDBC_days03 (0) | 2022.05.05 |
[SIST] JDBC_days02 (0) | 2022.05.03 |