[JAVA] 자바 - 트랜잭션(Transaction)
by mini_min[JAVA]
자바 - 트랜잭션(Transaction)
✔️ 트랜잭션란?
: 트랜잭션은 하나의 논리적 작업 단위! 일련의 작업이다.
: 시스템에서 사용되는 쪼갤 수 없는 업무 단위이다!
◼️ 트랜잭션 예시 : 계좌이체
계좌 출금 -> 계좌 입금 -> 모든 거래 기록이 하나의 작업 단위로 모두 처리되어야한다.
⭐ 일관된 데이터베이스에서 정상적인 트랜잭션이 수행되면 다시 일관된 상태가 되어야한다!
위에 작업 중 하나의 작업이라도 정상 수행되지 않으면, 무결성이 깨져서 손해보는 상황이 발생한다.
✔️ 트랜잭션 특징
: 원자성 : 트랜잭션은 하나도 수행되지 않거나 모두 수행되어야한다.
: 일관성 : 모든 데이터는 일관되어야한다.
: 현재 접근하고 있는 데이터는 다른 트랜잭션으로부터 격리되어야한다.
getAutoCommit() --연결된 Connection 객체의 트랜잭션 모드를 반환!
setAutoCommit() --연결된 Connection 객체의 트랜잭션 모드 설정! false 또는 true
Commit();
rollback();
-- 예시
@Override
public int deleteMember(String id) throws SQLException {
PreparedStatement pstmt = null;
String sql;
int result = 0;
try {
conn.setAutoCommit(false);
sql = "DELETE FROM member2 WHERE id = ?";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, id);
result = pstmt.executeUpdate();
pstmt.close();
pstmt=null;
sql = "DELETE FROM member1 WHERE id = ?";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, id);
result = pstmt.executeUpdate();
conn.commit();
} catch (SQLException e) {
try {
conn.rollback();
} catch (Exception e2) {
}
e.printStackTrace();
throw e;
} finally {
if(pstmt != null) {
try {
pstmt.close();
} catch (Exception e2) {
}
}
try {
conn.setAutoCommit(true);
} catch (Exception e2) {
}
}
return result;
}
💡 conn.setAutoCommit(false);
: sql 2개가 각각 하나씩 자동으로 커밋되지 않도록 막는다.
: 2개의 테이블에 데이터를 넣을 때, sql 하나하나가 바로 커밋되면 문제가 생길 수 있으니까 설정을 바꾸는 것
2개의 sql 모두 정상적으로 실행되었으면 conn.commit(); 한다.
만약 sql 문법 오류가 있으면 conn.rollback(); 한다.
모든 작업이 끝나고 conn.setAutoCommit(true); 한다.
'Java' 카테고리의 다른 글
[JAVA] 자바 - 파일 처리 (파일 입출력 스트림/파일 복사하기) (0) | 2022.08.28 |
---|---|
[JAVA] 자바 - 입출력 스트림 (바이트 스트림/문자 스트림/BufferedReader) (0) | 2022.08.28 |
[JAVA] 자바 - JDBC CallableStatement 인터페이스 (0) | 2022.08.24 |
[JAVA] 자바 - JDBC PreparedStatement 인터페이스 (0) | 2022.08.22 |
[JAVA] 자바 - JDBC Statement (SELECT 문 / executeQuery / ResultSet) (0) | 2022.08.21 |
블로그의 정보
개발자 미니민의 개발로그
mini_min