1. JDBCTemplate
JDBC에서 반복되는 코드를 따로 모아두는 클래스 (반복되는 코드를 따로 빼기)
기존 JDBC는
Class.forName(...)
DriverManager.getConnection(...)
con.close()
위 코드들을 항상 적어야 하기 때문에 코드가 길어지기에 이를 해결하기 위한 클래스
1-1 JDBCTemplate 안에 포함되는 기능
| 기능 | 역할 |
| getConnection() | DB 연결 |
| close() | 연결 종료 |
2. getConnection()
Oracle DB 연결 생성 메소드
public static Connection getConnection()
- 드라이버 등록
- DB 연결
- Auto Commit 설정
2-1 getConnection() 전체 코드
public class JDBCTemplate {
// 1. DB 연결 메소드
// 다른 클래스에서 getConnection()을 호출하면
// Oracle DB와 연결된 Connection 객체를 반환해준다.
public static Connection getConnection() {
// Connection 객체를 담을 변수
Connection con = null;
// 1-1. Oracle JDBC 드라이버 등록
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
// Java가 Oracle DB와 연결할 수 있도록 드라이버를 불러오는 코드
} catch (ClassNotFoundException e) {
System.out.println("[Error] 드라이버 등록 실패");
e.printStackTrace();
}
// 1-2. DB 연결 정보
String url = "jdbc:oracle:thin:@localhost:1521/orcl";
String id = "ID";
String pw = "PW";
// 1-3. DB 연결
try {
con = DriverManager.getConnection(url, id, pw);
// url, id, pw를 이용해서 DB에 접속
con.setAutoCommit(false);
// 자동 커밋 해제
// INSERT, UPDATE, DELETE 후
// 직접 commit() 또는 rollback() 하기 위해 설정
} catch (SQLException e) {
System.out.println("[Error] 오라클 연결 실패");
e.printStackTrace();
}
// 1-4. 연결된 Connection 객체 반환
return con;
}
}
2-2 Auto Commit
자동 저장 기능 활성화 여부
con.setAutoCommit(false);
false : 비활성화
true : 활성화
직접 commit, rollback 처리 가능
3. close()
사용 끝난 DB 연결 종료
public static void close(Connection con)
- Connection 종료
- Statement 종료
- ResultSet 종료
3-1 close() 전체 코드
public class JDBCTemplate {
// 2. Connection 종료 메소드
// DB 연결 종료
public static void close(Connection con) {
try {
if(con != null) {
con.close();
}
} catch (SQLException e) {
System.out.println("[Error] con close 실패");
e.printStackTrace();
}
}
// 3. Statement 종료 메소드
// SQL 실행 도구 종료
public static void close(Statement stmt) {
try {
if(stmt != null) {
stmt.close();
}
} catch (SQLException e) {
System.out.println("[Error] stmt close 실패");
e.printStackTrace();
}
}
// 4. ResultSet 종료 메소드
// SELECT 결과 저장 객체 종료
public static void close(ResultSet rs) {
try {
if(rs != null) {
rs.close();
}
} catch (SQLException e) {
System.out.println("[Error] rs close 실패");
e.printStackTrace();
}
}
}
4. 다른 클래스에서 사용
4-1 static import
다른 클래스의 static 메소드를 클래스명 없이 바로 사용할 수 있게 해주는 기능
import static common.JDBCTemplate.*;
- 클래스명 없이 메소드 사용 가능
getConnection();
해당 형식으로 클래스명을 생략하여 사용 가능
4-2 static 없이 import
import common.JDBCTemplate.*;
JDBCTemplate.getConnection();
메소드 앞에 클래스명이 항상 붙여야 한다.
5. executeUpdate()
데이터를 추가, 수정, 삭제하기 위해 사용하는 기
int res = stmt.executeUpdate(sql);
- res에 SQL 실행 결과로 몇 개의 행이 영향을 받았는지 저장
5-2 executeQuery()와 executeUpdate() 차이
| 메소드 | 사용 SQL | 결과 |
| executeQuery() | SELECT | ResultSet 반환 |
| executeUpdate() | INSERT, UPDATE, DELETE | int 반환 |
SELECT 일 때
조회 결과가 필요하기에 ResultSet으로 결과를 받는다.
ResultSet rs = stmt.executeQuery(sql);
INSERT 일 때
몇 행이 추가되었는지 확인하기 때문에 int로 결과를 받는다.
int res = stmt.executeUpdate(sql);
5-3 executeUpdate() 반환
if(res > 0) {
System.out.println("insert 성공");
} else {
System.out.println("insert 실패");
}
res 반환값으로 추가/수정/삭제 성공 여부 출력 가능
6. PreparedStatement
SQL문을 미리 준비하고, 값을 나중에 넣는 방식
String sql = " INSERT INTO MYTEST VALUES(?,?,?) ";
- ? 는 나중에 값을 넣을 자리
7. PreparedStatement 사용 순서
7-1 SQL 작성
String sql = " INSERT INTO MYTEST VALUES(?,?,?) ";
7-2 PreparedStatement 생성
pstm = con.prepareStatement(sql);
7-3 ?에 값 넣기
pstm.setInt(1, no);
pstm.setString(2, name);
pstm.setString(3, nickName);
7-4 실행
int res = pstm.executeUpdate();
8. Statement와 PreparedStatement 비교
| Statement | PreparedStatement | |
| SQL 작성 | 문자열 직접 연결 | ? 사용 |
| 값 넣기 | 문자열에 직접 포함 | setInt(), setString() |
| 가독성 | 복잡함 | 깔끔함 |
| 실수 가능성 | 높음 | 낮음 |
| 보안 | 상대적으로 취약 | 더 안전함 |
9. Delete
테이블에서 데이터를 삭제하는 SQL
String sql = " DELETE FROM MYTEST WHERE MNAME=? ";
9-1 PreparedStatement로 DELETE 실행
String name = new Scanner(System.in).next();
pstm = con.prepareStatement(sql);
pstm.setString(1, name);
int res = pstm.executeUpdate();
1. 사용자가 이름 입력
2. ? 자리에 이름 넣기
3. DELETE 실행
4. 삭제된 행 개수 반환
'FullStack Study > 9주차' 카테고리의 다른 글
| JAVA 풀스택 41일차 - Algorithm2 (정렬 / 이진탐색트리) (0) | 2026.05.25 |
|---|---|
| JAVA 풀스택 40일차 - Algorithm (재귀함수 / 이중연결리스트 / 스택,큐) (0) | 2026.05.22 |
| JAVA 풀스택 39일차 - JDBC (MVC 패턴) (0) | 2026.05.21 |
| JAVA 풀스택 38일차 - JDBC (MVC 패턴) (0) | 2026.05.20 |