티스토리 뷰

Java

[Java] JDBC 개념 정리

woo'^'chang 2023. 6. 8. 14:56

JDBC

JDBC(Java Database Connectivity)는 자바 애플리케이션과 데이터베이스 간의 연결과 상호작용을 위한 자바 인터페이스이다. 표준화된 인터페이스를 제공함으로 데이터베이스를 쉽게 다룰 수 있도록 하며, 여러 데이터베이스에 대해 동일한 방식으로 데이터베이스 연결, 쿼리 실행, 결과 처리 등을 수행할 수 있다.

JDBC를 사용해서 데이터베이스와 연결 및 통신을 하기 위해서는 아래의 단계를 따른다.

 

[ 1. JDBC 드라이버 로드 ]

드라이버(Driver)란 데이터베이스와 연결을 관리하는 데 사용되는 컴포넌트이다. 드라이버는 데이터베이스 벤더에 따라 자체적인 드라이버가 존재하고 일반적으로 JAR 파일 형식으로 제공된다.

프로젝트에서 사용하고자 하는 데이터베이스와 관련된 모듈을 추가한다면 데이터베이스에 알맞은 드라이버를 사용할 수 있게 된다.

 

[ 2. 데이터베이스 연결 설정 ]

JDBC 드라이버를 사용하여 데이터베이스와 연결을 설정한다. 추가한 드라이버는 DriverManager에 등록되고 서브 프로토콜, URL, 유저 이름, 비밀번호 등과 같은 정보를 통해 해당 데이터베이스와 연결되고 통신에 필요한 커넥션을 획득할 수 있다.

DriverManager는 데이터베이스 드라이버 목록을 관리하고 적절한 드라이버를 선택해 연결을 하는 역할을 수행한다. 대표적인 메서드는 아래와 같다.

  • registerDriver(Driver driver) : 드라이버를 DriverManager에 등록한다.
  • getConnection(String url, String user, String password) : URL, 유저, 비밀번호 정보로 적절한 드라이버를 선택하여 데이터베이스 연결을 시도 후 연결 객체를 반환한다.

데이터베이스 모듈을 추가하는 것만으로도 DriverManager에 드라이버가 등록되는 것을 알 수 있는데, 이는 클래스가 로드되는 과정에서 드라이버에 존재하는 정적 초기화 블록에 의해 드라이버 등록이 수행되기 때문이다.

 

Connection은 데이터베이스 연결로부터 얻은 세션 정보를 가지고 있는 인터페이스이다. SQL문을 실행하거나 결과를 받아오는데 필요한 메서드를 제공한다. 대표적인 메서드는 아래와 같다.

  • prepareStatement(String sql) : SQL문을 사전 컴파일하고 PreparedStatement를 생성한다. PreparedStatement는 SQL문을 실행할 때 사용된다.
  • setAutoCommit(boolean status) : 데이터베이스 자동 커밋 모드를 설정한다. true로 설정되면 각 SQL문이 별도의 트랜잭션으로 실행된다.
  • commit() : Connection이 현재 가진 모든 변경 사항을 데이터베이스에 커밋한다.
  • rollback() : Connection이 현재 가진 모든 변경 사항을 롤백한다.
  • close() : Connection 객체와 관련된 데이터베이스와의 연결을 종료한다. 연결을 종료한 객체는 더 이상 사용할 수 없다.

 

[ 3. SQL 실행 및 결과 처리 ]

Connection으로부터 생성한 PreparedStatement를 통해 SQL문을 실행한다. 실행 결과는 ResultSet에 담기게 된다. ResultSet은 쿼리 실행 결과를 탐색하고 처리하기 위한 인터페이스이다.

특정 컬럼의 인덱스와 특정 컬럼의 이름을 통해 데이터를 추출할 수 있다.

정리

  • 자바에서는 데이터베이스 연결을 위한 표준 인터페이스를 제공한다.
  • 데이터베이스 벤더에서는 자바 표준에 알맞은 드라이버를 제공하고 있다.
  • 데이터베이스 연결, 쿼리 실행, 결과 확인 등에 필요한 구성 요소를 인터페이스화 해두었기 때문에 사용하고자 하는 데이터베이스 모듈만 추가하면 해당 모듈의 구현체들을 활용할 수 있다.
  • 연결, 실행, 확인 등의 낮은 수준의 인터페이스로 이루어져 있기 때문에 복잡하고 반복되는 작업이 요구된다.

'Java' 카테고리의 다른 글

[Java] 상속을 언제 사용해야 할까  (8) 2023.03.26
[Java] 자바의 특징  (0) 2022.11.26
방어적 복사에서 clone은 안전한가  (0) 2022.07.12
Java 정규표현식  (0) 2022.06.23
Java Enum  (0) 2022.06.16
댓글
최근에 올라온 글
최근에 달린 댓글
«   2024/06   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30
Total
Today
Yesterday