[JDBC] 데이터베이스 연결 설정

적절한 드라이버를 설치한 후에는 JDBC를 사용하여 데이터베이스 연결을 설정합니다.

JDBC 연결을 설정하는 프로그래밍 과정은 상당히 간단합니다. 다음 네 가지 단계가 있습니다.

  • JDBC 패키지 가져오기 : JAVA 코드에서 필요한 클래스를 가져오려면 import 문을 추가합니다.
  • JDBC 드라이버 등록 : 이 단계에서는 원하는 드라이버 구현을 메모리에 로드하여 JDBC 요청을 처리할 수 있도록 합니다.
  • 데이터베이스 URL 작성 : 연결하려는 데이터베이스를 가리키는 형식화된 주소를 만듭니다.
  • 연결 객체 생성 : DriverManager 객체의 getConnection() 메서드를 호출하여 실제 데이터베이스 연결을 설정합니다.

JDBC 패키지 가져오기

import 문은 Java 컴파이러에 코드에서 참조하는 클래스의 위치를 알려줍니다.

표준 JDBC 패키지를 사용하려면 다음 import문을 소스 코드에 추가합니다.

import java.sql.*;  // 표준 JDBC 프로그램용
import java.math.*; // BigDecimal 및 BigInteger 지원용

JDBC 드라이버 등록

드라이버를 사용하기 전에 프로그램에서 등록해야 합니다. 드라이버 등록은 Oracle 드라이버의 클래스 파일을 메모리에 로드하여 JDBC 인터페이스의 구현으로 사용할 수 있도록 하는 과정입니다.

1. Class.forName()

드라이버를 등록하는 가장 일반적인 방법은 Java의 Class.forName() 메서드를 사용하여 드라이버의 클래스 파일을 동적으로 메모리에 로드하는 것입니다. 이 메서드는 드라이버 등록을 구성 가능하고 이동 가능하게 만들어 주기 때문에 선호됩니다.

try {
   Class.forName("oracle.jdbc.driver.OracleDriver");
} catch(ClassNotFoundException ex) {
   System.out.println("Error: unable to load driver class!");
   System.exit(1);
}

newInstance() 메서드를 사용하여 비호환 JVM을 해결할 수 있지만 이 경우 두 개의 추가 예외를 처리해야합니다.

try {
   Class.forName("oracle.jdbc.driver.OracleDriver").getDeclaredConstructor().newInstance();
} catch(ClassNotFoundException ex) {
   System.out.println("Error: unable to load driver class!");
   System.exit(1);
} catch(IllegalAccessException ex) {
   System.out.println("Error: access problem while loading!");
   System.exit(2);
} catch(InstantiationException ex) {
   System.out.println("Error: unable to instantiate driver!");
   System.exit(3);
}

2. DirverManager.registerDriver()

이 방법은 microsoft가 제공하는 비 JDK 호환 JVM을 사용하는 경우 유용합니다.

try {
   Driver myDriver = new oracle.jdbc.driver.OracleDriver();
   DriverManager.registerDriver(myDriver);
} catch(SQLException ex) {
   System.out.println("Error: unable to load driver class!");
   System.exit(1);
}

데이터베이스 URL 작성

드라이버를 로드한 후에는 DriverManager.getConnection() 메서드를 사용하여 연결을 설정할 수 있습니다. 참조하기 쉽게 세 가지 오버로드된 메서드를 나열합니다.

  • getConnection(String url)
  • getConnection(String url, Properties prop)
  • getConnection(String url, String user, String password)

각 형식은 데이터베이스 URL을 필요로 합니다. 데이터베이스 URL은 데이터베이스를 가리키는 주소입니다.

URL을 작성하는 것이 연결 설정과 관련된 대부분의 문제를 발생시키는 부분입니다.

각 데이터베이스와 JDBC 드라이버 이름

RDBMS JDBC 드라이버 이름 URL 형식
MySQL com.mysql.cj.jdbc.Driver jdbc:mysql://hostname/dbname
ORACLE oracle.jdbc.driver.OracleDriver jdbc:oracle:thin:@hostname:dbname
MSSQL com.microsoft.sqlserver.jdbc.SQLServerDriver jdbc:sqlserver://hostname;DatabaseName=dbname
Mariadb org.mariadb.jdbc.Driver jdbc:mariadb://hostname/dbname
hsqldb org.hsqldb.jdbcDriver jdbc:hsqldb:hsql://hostname/dbname

연결 객체 생성

DriverManager.getConnection() 메서드를 사용하여 연결 객체를 생성합니다.

URL, 사용자이름, 비밀번호 사용

가장 일반적으로 사용되는 getConnection() 형식은 데이터베이스 URL, 사용자 이름, 비밀번호를 전달하는 것입니다.

오라클의 thin 드라이버를 사용하는 경우, URL의 데이터베이스 부분에는 host:port 값을 지정합니다.

예를 들어, TCP/IP 주소 192.0.0.1에 hostname이 test, 오라클 리스너가 포트 1521에 구성되어있으며 데이터베이스 이름이 Users인 경우 데이터베이스 URL은 다음과 같습니다.

jdbc:oracle:thin@test:1521:Users

이제 사용자 이름과 비밀번호를 사용하여 getConnection() 메서드를 호출하여 연결 객체를 얻습니다.

String URL = "jdbc:oracle:thin:@test:1521:Users";
String USER = "username";
String PASS = "password";
Connection conn = DriverManager.getConnection(URL, USER, PASS);

데이터베이스 URL만 사용

DriverManager.getConnection() 메서드의 두 번째 형식은 데이터베이스 URL만을 필요로 합니다.

DriverManager.getConnection(String url)

그러나 이 경우 데이터베이스 URL에 사용자 이름과 비밀번호를 포함시켜야 합니다.

jdbc:oracle:thin:username/password@database
String URL = "jdbc:oracle:thin:username/password@test:1521:Users
Connection conn = DriverManager.getConnection(URL)

데이터베이스 URL과 Properties 객체 사용

DriverManager.getConnection(String url, Properties info)

Porperties 객체는 키-값 쌍의 집합을 보유합니다. 이 객체는 getConnection() 메서드를 호출할 때 드라이버 속성을 드라이버에 전달합니다.

String URL = "jdbc:oracle:thin:@test:1521:Users";
Properties info = new Properties();
info.put("user","username");
info.put("password","password")

Connection conn = DriverManager.getConnection(URL, info)

JDBC 연결 닫기

JDBC 프로그램이 끝나면 데이터베이스 세션을 종료하기 위해 모든 연결을 명시적으로 닫아야합니다. 만약 잊어버린다면, JAVA의 가비지 컬렉터가 오래된 객체를 정리할 때 연결을 닫습니다. 특히 데이터베이스 프로그래밍에서 가비지 컬렉션에 의존하는 것은 매우 좋지 않습니다. close() 메서드를 활용하여 항상 연결을 닫는 것이 좋습니다.

finally 블록에 close()를 호출합니다.

conn.close()

'Databases > JDBC' 카테고리의 다른 글

[JDBC] ResultSet란  (0) 2024.07.05
[JDBC] Statements, PreparedStatement and CallableStatement  (0) 2024.07.05
[JDBC] Driver Types  (0) 2024.07.05
[JDBC] JAVA에서 데이터베이스 연결해보기  (0) 2024.07.05
[JDBC] JDBC란  (0) 2024.07.05