본문 바로가기
Backend/JDBC

JDBC Template 구현

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

JDBC Template 구현

			prop.load(new FileReader("src/com/forsaken/connection/jdbc-config.properties"));

			String driver = prop.getProperty("driver");
			String url = prop.getProperty("url");
			String user = prop.getProperty("user");
			String password = prop.getProperty("password");

			System.out.printf("%s %s %s %s\n", driver, url, user, password);

			try {
				Class.forName(driver);
			} catch (ClassNotFoundException e) {
				e.printStackTrace();
			}
			con = DriverManager.getConnection(url, user, password);

properties 파일로부터 데이터베이스 연결 정보를 가져오고 하나의 connection을 생성하는 과정은 데이터베이스에 요청하는데에 사용된다.

한 번의 요청 후 또다른 요청을 할 때는 새롭게 connection을 생성해야한다.

여러번의 요청을 할 때 매번 connection을 생성하는 코드를 작성해야하는 문제가 있다.

이럴 때 connection 생성과 관련된 로직만 따로 분리할 수 있다.

public class JDBCTemplate {
	public static Connection getConnection() {
		Connection con = null;
		Properties prop = new Properties();

		try {
			prop.load(new FileReader("config/connection-info.properties"));
			String driver = prop.getProperty("driver");
			String url = prop.getProperty("url");

			Class.forName(driver);
			con = DriverManager.getConnection(url, prop);

		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}

		return con;

	}

	public static void close(Connection con) {
		try {
			if (con != null && !con.isClosed()) {
				con.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
}

객체는 상태와 메소드를 가질 수 있는데 상태의 변화가 없이 기능 제공 목적으로 제공되는 경우 매번 인스턴스를 호출할 필요가 없다.

따라서 static 키워드를 통해서 매번 인스턴스를 생성하지 않아 메모리를 절약할 수 있다.

getConnection 메소드에 connection 관련 로직을 작성하고 사용하는 쪽에서는 필요한 위치마다 getConnection 메소드를 호출하여 사용할 수 있다.

마찬가지로 close에 대한 로직도 close 메소드로 분리하여 사용할 수 있다. 

이 때 connection이 null이 아닌지와 connection이 미리 닫혀있는 경우를 체크하는데 순서는 반드시 null인지 먼저 체크하여

NullPointerException을 유발하지 않도록 한다.

public class Application {
	public static void main(String args[]) {
		Connection con = getConnection();
		System.out.println(con);
		close(con);
	}
}

사용하는 쪽에서는 훨씬 더 보기 좋고 효율적으로 사용할 수 있다.

728x90
반응형

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

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

댓글