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 |
댓글