1. 전체등록
package com.haenin.section01.connection;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class Application1 {
/* 목표. 해당 DBMS 경로와 계정에 맞는 Connection 객체를 생성할 수 있다.
(feat.해당 DB Driver 라이브러리 필요) */
public static void main(String[] args) {
Connection con = null;
/* 설명. mysql 드라이버 클래스의 풀 네임을 통해 드라이버 등록(메모리에 등록) */
try {
Class.forName("com.mysql.cj.jdbc.Driver"); // 필기. 동적 메모리 할당
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/menudb",
"root",
"mariadb");
System.out.println("Connection 객체: " + con);
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
} catch (SQLException e) {
throw new RuntimeException(e);
} finally {
try {
if(con != null) con.close();
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
}
}
2. Properties 등록
package com.haenin.section01.connection;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;
public class Application2 {
public static void main(String[] args) {
Connection con = null;
Properties prop = new Properties();
/* 설명. mysql 드라이버 클래스의 풀 네임을 통해 드라이버 등록(메모리에 등록) */
try {
prop.load(
new FileReader(
"src/main/java/com/haenin/section01/connection/jdbc-config.properties"));
String driver = prop.getProperty("driver");
String url = prop.getProperty("url");
String user = prop.getProperty("user");
String password = prop.getProperty("password");
Class.forName(driver); // 필기. 동적 메모리 할당
con = DriverManager.getConnection(url, user, password);
System.out.println("Connection2 객체: " + con);
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
} catch (SQLException e) {
throw new RuntimeException(e);
} catch (FileNotFoundException e) {
throw new RuntimeException(e);
} catch (IOException e) {
throw new RuntimeException(e);
} finally {
try {
if(con != null) con.close();
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
}
}

driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/menudb
user=root
password=mariadb
3. Template 등록
package com.haenin.section02.template;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;
public class JDBCTemplate {
public static Connection getConnection() {
Connection con = null;
Properties prop = new Properties(); // 필기. 키와 벨류가 스트링인 맵
/* 설명. mysql 드라이버 클래스의 풀 네임을 통해 드라이버 등록(메모리에 등록) */
try {
prop.load(new FileReader(
"src/main/java/com/haenin/section01/connection/jdbc-config.properties"));
String driver = prop.getProperty("driver");
String url = prop.getProperty("url");
String user = prop.getProperty("user");
String password = prop.getProperty("password");
Class.forName(driver);
con = DriverManager.getConnection(url, user, password);
System.out.println("Connection 객체: " + con);
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
} catch (SQLException e) {
throw new RuntimeException(e);
} catch (FileNotFoundException e) {
throw new RuntimeException(e);
} catch (IOException e) {
throw new RuntimeException(e);
}
/* 설명. Connection 객체를 닫으면 안됨 */
// 필기. 닫혀있지 않는 connection 객체를 넘겨준다.
return con;
}
public static void close(Connection con) {
if(con != null) {
try {
con.close();
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
}
}
package com.haenin.section02.template;
import java.sql.Connection;
import static com.haenin.section02.template.JDBCTemplate.getConnection;
import static com.haenin.section02.template.JDBCTemplate.close;
// 필기. JDBCTemplate을 모듈화 하였다
// 필기. 메소드명까지 임포트
// 필기. 메소드일때는 static메소드랑 임포트할때도 static이어야 가능
public class Application {
public static void main(String[] args) {
/* 설명. main 로직에서 Connection 객체가 필요한 순간에 한줄 코딩으로 받아내기*/
// Connection con = JDBCTemplate.getConnection();
Connection con = getConnection();
// 필기. close가 메소드안에있기 그걸 지우고 떄문에 닫는거는 내가해야한다
System.out.println("con = " + con);
// 필기. connection 객체를 활용한 구문(SQL문을 통해 DB와의 CURD)
close(con);
}
}