[F-Lab 모각코 챌린지] 45일차 - JDBC - Connection (2)

F-Lab 모각코 챌린지 45일차. JDBC 의 Connection 인터페이스 톺아보기 2일차 입니다. 해당 인터페이스는 JPA 에서 내부적으로 사용하는 인터페이스인 만큼 자세히 다뤄 볼 예정입니다. 내일 업로드 할 Connection(3) 에서는 트랜잭션 상수 값과 readOnly 관련 함수를 알아볼 예정입니다.

[F-Lab 모각코 챌린지] 45일차 - JDBC - Connection (2)

Connection interface

이전에 확인했던 부분 다음으로 계속 공부해보자

void setAutoCommit(boolean autoCommit) throws SQLException;
boolean getAutoCommit() throws SQLException;
void commit() throws SQLException;
void rollback() throws SQLException;
void close() throws SQLException;
boolean isClosed() throws SQLException;
  • void setAutoCommit(boolean autoCommit) throws SQLException;
    커밋 모드를 온/오프 한다
    이전 설정이 auto commit 모드 였다면 개별 트랜잭션이 실행되고 커밋된다.
    auto commit 모드가 아니라면 해당 Connection 은 commit 혹은 rollback 되는 트랜잭션에 그룹화 된다.
  • boolean getAutoCommit() throws SQLException;
    연결에 대한 auto commit 셋팅 값 리턴
  • void commit() throws SQLException;
    수행되었던 모든 변경 사항을 데이터베이스에 영속화 하며 해당 Connection 이 얻은 데이터베이스 락을 해제한다.
    이 옵션은 auto commit 옵션이 false 일 때만 사용해야 한다.
  • void rollback() throws SQLException;
    현재 트랜잭션에서 수행된 모든 변경 사항을 취소하고 데이터베이스에서 얻은 락을 해제한다
    이 역시 auto commit 옵션이 false 일 때만 사용해야 한다.
    두 옵션에서 auto commit 옵션이 활성화 상태일 때 사용하지 말아야 하는 이유는, auto commit 모드가 활성화 될 경우 위에서 설명했듯 각 SQL 문이 개별적인 트랜잭션으로 처리된다. 롤백을 적용하는 시점에서는 이미 이전 SQL 이 다른 트랜잭션으로 취급되어 있기 때문에 이전 변경 사항을 취소할 수 없게된다.
    하지만 auto commit 모드가 비활성화 된 경우에는 하나의 트랜잭션에 SQL 문이 그룹화 되는 형태로 만들어지게 되며 트랜잭션의 롤백이 가능하다.
  • void close() throws SQLException;
    해당 Connection 객체의 데이터베이스 or JDBC 리소스가 자동 해제를 해주길 기다리지 않고 즉시 해제한다. 만일 트랜잭션이 열려있는 상태에서 이 메서드를 호출 할 경우 해당 기능을 구현 한 구현체에 따라 결과가 정의되기 때문에, 개발자의 의도와는 다른 형태로 동작 할 가능성이 있다.
  • boolean isClosed() throws SQLException;
    해당 Connection 객체가 닫혔는지 여부를 리턴한다.
    이 메서드는 바로 위의 함수인 Connection.close() 메서드가 호출된 후에만 true 를 반환하는 것이 보장된다.
    단, 이 메서드는 데이터베이스 연결이 유효한지 확인하기 위한 개발자의 호출을 허용하지 않는다. 일반적인 방법으로는 작업을 시도 할 때 발생할 수 있는 예외를 catch 하여 연결의 유효 여부를 판단할 수 있다.