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

F-Lab 모각코 챌린지 46일차. JDBC 의 Connection(3일차) 공부 기록 입니다. 클래스를 공부하며 몰랐던 키워드들과 함께 정리하였습니다.

[F-Lab 모각코 챌린지] 46일차 - JDBC Connection (3)
void setReadOnly(boolean readOnly) throws SQLException;
boolean isReadOnly() throws SQLException;
void setCatalog(String catalog) throws SQLException;
String getCatalog() throws SQLException;
int TRANSACTION_NONE = 0;
int TRANSACTION_READ_UNCOMMITTED = 1;
int TRANSACTION_READ_COMMITTED = 2;
int TRANSACTION_REPEATABLE_READ = 4;
int TRANSACTION_SERIALIZABLE = 8;

void setReadOnly(boolean readOnly) throws SQLException;

연결을 읽기 전용 모드로 설정한다.

이 설정은 트랜잭션 도중에 호출할 수 없다.

💡
왜 트랜잭션 도중에 호출할 수 없을까, 충분히 만들 수 있지 않을까 하여 검색하던 도중, ACID 를 준수하기 위해서라는 답 밖에 찾지 못했다. 하지만 재미있는 글을 찾았는데, 아직 읽기에는 버거운 지식이지만 나중에 Connection 클래스를 이해하고 Database 쪽을 공부 할 때 도움이 될 것 같아 링크 남겨둔다.
https://dev.mysql.com/doc/connector-j/8.0/en/connector-j-usagenotes-basic.html

boolean isReadOnly() throws SQLException;

readOnly 값을 확인하는 메서드

void setCatalog(String catalog) throws SQLException;

해당 Connection 객체의 Database 에서 작업 할 서브스페이스를 선택하기 위해 카탈로그 이름을 설정한다

  • 카탈로그란, 데이터베이스에서 객체(테이블, 뷰, 인덱스 등)들을 그룹화 하고 구조화 하는 논리적인 컨테이너 이다. 데이터베이스 스키마(Schema) 의 상위 개념이라고 이해 하면 편하다.

String getCatalog() throws SQLException;

설정 되어 있는 카탈로그 이름을 확인한다

트랜잭션 상수

  • int TRANSACTION_NONE = 0;
    트랜잭션을 지원하지 않음
  • int TRANSACTION_READ_UNCOMMITTED = 1;
    한 트랜잭션에서 변경 한 변경 사항을 커밋되기 이전에 읽을 수 있다.
  • int TRANSACTION_READ_COMMITTED = 2;
    커밋된 변경 사항 만을 읽는다.
    Phantom read 가 발생할 수 있다.
  • int TRANSACTION_REPEATABLE_READ = 4;
    Non-repeatable read 를 방지하는 설정이다.
    Transaction-A 가 하나의 첫번째 행을 읽을 때, Transaction-B 가 두번째 행을 변경했다. 이 때 Transaction-A 가 두번째 행을 조회 한 경우를 방지한다는 말이다. 해당 옵션을 사용하면 트랜잭션 내에서 같은 쿼리를 반복 실행했을 때, 일관성을 보장한다
  • int TRANSACTION_SERIALIZABLE = 8;
    Phantom read 와 Non-repeatable read 를 방지한다.

Phantom read 발생 상황: 결과 집합이 변경되는 상황