티스토리 뷰
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 |