본문 바로가기
Backend/JDBC

JDBC Connection 생성

by Forsaken Developer 2023. 6. 8.
728x90
728x90

JDBC Connection 생성

public class Application {
	public static void main(String[] args) {
        Connection con = null;
        try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
			
			String url = "jdbc:oracle:thin:@localhost:1521:xe";
			String user = "C##PCROOM";
			String password = "PCROOM";
		
			con = DriverManager.getConnection(url,user,password);
			System.out.println(con);
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			if(con!= null) {
				try {
					con.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}				
			}
		}
	}
}

java.sql이라는 패키지에서 Connection객체를 import할 수 있는데 Connection 객체는 데이터베이스 접속에 관련된 정보를 저장하고 있는 객체이다.

이 객체를 통해서 쿼리문을 실행할 수 있는 Statement를 생성할 수 있다.

Connection은 인터페이스 이기때문에 생성자를 통해서 객체를 생성할 수 없다. 

데이터베이스 접속 시 사용된 자원은 스트림을 사용하는데 close를 통해서 자원의 반납이 필요하다.
자원의 반납을 하지 않으면 누수가 발생하고 성능에 악영향을 끼친다.

성공 실패 여부와 상관없이 connection의 해제를 하게 되는데 생성은 try블럭에서 하게 되고 finally 블럭에서 close메소드 호출하기 위해서 try 블록밖에서 Connection을 선언한다.

Class객체의 forName이라는 메소드를 통해서 oracle.jdbc.driver.OracleDriver를 사용한다.

이 과정은 사용할 드라이버 등록하는 과정으로 DBMS 종류에 따라 달라진다.

이때 해당 클래스를 찾을 수 없을 때를 대비해서 ClassNotFoundException 처리가 필요하다.

classPath에 ojdbc가 추가되어 있지 않다면 예외가 발생할 것이다.

Class class는 모든 class에 대한 메타정보를 가지고 있는 타입이다.

자바는 최초 동작할 때 물리적으로 작성한 class들을 메모리에 올리고 사용하는 라이브러리를 메모리에 올리고 네트워크에 연결되어있는 것들을 올려서 실행하는 방식이다.

이러한 방식 외에도 클래스를 로드 할 수 있는 방법을 제공하는데 런타임 당시 이 코드를 만났을 때 동적으로 로드 될 수 있도록 하는 메소드가 Class.forName이다.

DriverManager라는 클래스의 getConnection이라는 메소드에 url, user, password 전달하여 데이터베이스에 접속가능한 연결 객체를 생성한다.

JDBC를 통해서 데이터베이스에 연결을 할 때 연결과 관련된 모든 예외를 SQLException을 통해서 처리한다.

connection을 생성하여 출력해보면 실제로는 T4CConnection 타입으로 객체를 생성해서 connection을 사용하게 되는데 상위 클래스인 Connection으로 타입이 은닉되어있다.

connection을 생성하지 않았다면 nullPointException이 발생하기 때문에 connection이 null이 아닐 경우에만 connection을 close할 수 있도록 한다.

728x90
반응형

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

JDBC DTO의 개념  (0) 2023.06.12
JDBC statement와 resultSet 생성  (0) 2023.06.11
JDBC Template 구현  (0) 2023.06.10
JDBC 데이터베이스 접속 정보 분리  (0) 2023.06.09
JDBC의 개념과 설치 방법  (0) 2023.06.07

댓글