[DB] Eclipse에 JDBC 연동하기 (2)
이전 포스팅에서 Eclipse에서 JDBC를 사용하기 위한 기본적인 설정에 대해 알아보았다.
이번 포스팅에서는 지난 포스팅에서 언급한 JDBC가 실행되는 순서를 바탕으로 직접 JDBC를 이용하여 데이터베이스에 접근하기 위한 객체를 생성해보자! 🐱🐉
지난 포스팅의 내용을 다시 살짝 언급하자면 JDBC는 다음과 같은 순서로 실행되어진다. 이번에 설명할 순서도 지난번에 말한 순서와 같지만 좀 더 세분화 해서 적어보도록 하겠다.
1. JDBC 드라이버 등록
2. DriverManager의 getConnection() 을 이용해서 Connection 객체를 얻어낸다.
3. Connection 객체의 createStatement() 를 이용해서 Statement 객체를 얻어낸다.
4. Statement 객체의 executeQuery()나 executeUpdate() 를 이용해서 SQL을 데이터베이스에 전송한다.
5. ResultSet 객체와 getXXX() 을 이용하여 SQL 문장의 실행 결과를 얻는다.
6. Statement, Connection, ResultSet 객체를 close() 함수를 호출하여 연결을 끝마친다.
지난번과 다르진 않지만 각 단계에서 수행해야 할 동작을 좀 더 세분화하여 표시해보았다. 이번 포스팅에서 다룰 내용은 2번 까지의 내용이다. 이제 한 단계 한 단계씩 코드를 통해 살펴보면서 직접 구현해 보도록하자! 🐱🐉
우선 JDBC를 이용하여 데이터베이스와 접속할 객체를 생성한다. 편의를 위해 DBUtil 이라는 이름으로 클래스를 생성하도록 하겠다.
DBUtil 클래스는 다음과 같은 구조로 이루어져 있다.
변수
- url : 데이터베이스 서버의 주소를 저장할 변수
- driver : JDBC 드라이버를 생성하기 위한 class 이름을 저장한 변수
- id : 데이터베이스에 접속하기 위한 id
- password : 데이터베이스에 접속하기 위한 password
메서드
- getConnection() : DriverManager의 getConnection() 메서드를 이용하여 connection 객체를 반환한다.
- close() : 데이터베이스 작업을 끝마치고 연결을 종료하기 위한 메서드
아래는 위의 DBUtil 객체를 구현한 코드이다.
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class DBUtil {
static final String url = "jdbc:mysql://server_address:server_port/database_name"
+ "?serverTimezone=UTC&useUniCode=yes&characterEncoding=UTF-8";
static final String driver="com.mysql.cj.jdbc.Driver";
static final String id="id";
static final String password="password";
static {
try {
Class.forName(driver);
}catch(Exception e) {
e.printStackTrace();
}
}
public static Connection getConnection() throws SQLException{
return DriverManager.getConnection(url, id, password);
}
public static void close(AutoCloseable c) {
try {
c.close();
}catch(Exception e) {
e.printStackTrace();
}
}
}
우선 눈여겨 볼 것은 Class.forName(driver) 부분이다.
자바에서 객체를 생성하는 방법은 여러가지가 있다. 일반적으로 new 키워드를 이용해서 객체를 생성하는 방법이 있고 위의 코드에서 사용한 방법은 Class.forName() 을 사용한 방법으로 사용할 클래스의 이름을 알고, 해당 클래스에 default 생성자가 정의되어 있다면 위의 방법으로 생성할 수 있다.
이 때 매개변수로 전달되는 클래스 이름은 패키지 명을 포함한다.
이 때 드라이버를 생성하는 코드를 static 블록으로 묶어서 처리했는데, 객체를 여러번 생성하더라도 공통의 드라이버를 사용하기 때문에 드라이버는 최초 한 번만 실행되면 된다. 때문에 static 블록 내부에서 Class.forName(driver) 을 사용하여 드라이버를 생성하는 작업을 수행한다.
다음 포스팅에서는 JDBC를 통해 데이터베이스에 접근하여 데이터를 조회하는 방법에 대해 다루어보자!