📗 self-study/📗 KH정보교육원 당산지원

[JDBC] 02_JDBC실습구조_Service 있는 ver.

천재강쥐 2022. 9. 7. 15:46

 

더보기

service 클래스를 만들어

Connection 객체 기능을 담아 처리해 보자

 

 

프로그램 흐름



main view   controller   service   dao  

👉🏻

시각정보
입력, 출력

요청화면

👉🏻

호출
1. VO 가공

2. 서비스
호출

3. 결과

👉🏻

호출
1. CONN
생성

2. DAO
호출


👉🏻

호출
1. pstmt
생성

2실행,
결과

3. 가공
 

👈🏻

키보드
응답화면

👈🏻

성공
실패

응답화면 지정

👈🏻

결과
3. 트랜잭션

4.CONN
.CLOSE()

5. 리턴

👈🏻

결과
4.  pstm,
rset 반납

5. 리턴
 
          DB 접속
관련
  SQL 실행
관련
 

 

 

<common.JDBCTemplate>

 

*JDBC 과정 중 반복적으로 쓰이는 구문들을 각각의 메소드로 정의해 둘 것 
 "재사용할 목적"으로 공통 템플릿 작업 진행
 
* 이 클래스에서의 모든 메소드들은 모두 static 메소드로 만들 것임
=> 싱글톤 패턴: 메모리 영역에 단 한 번만 올라간 것을 두고두고 공유하며 재사용하는 개념

 

package com.kh.common;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class JDBCTemplate {
	
	// 1. DB와 접속된 Connection 객체를 생성해서 반환시켜 주는 메소드
	public static Connection getConnection() {
		
		Connection conn = null;
		
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
			
			conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "JDBC", "JDBC");
			
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
		return conn;
	}
	
	// 2. 전달받은 JDBC용 객체를 반납시켜 주는 메소드
	// 2_1. Connection 객체를 전달받아서 반납시켜 주는 메소드
	public static void close(Connection conn) {
		
		try {
			if(conn != null && !conn.isClosed()) { // 얘를 try ~ catch로 묶으면 conn.close()까지 자동 처리됨

					conn.close();
			} 
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
	// 2_2. (Prepared)Statement 객체를 전달받아서 반납시켜 주는 메소드
	// => 다형성으로 인해 PreparedStatement 객체 또한 매개변수로 전달 가능
	public static void close(Statement stmt) { // 오버로딩 적용
		
		try {
			if(stmt != null && !stmt.isClosed()) { // 얘를 try ~ catch로 묶으면 conn.close()까지 자동 처리됨
				stmt.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
	// 2_3. ResultSet 객체를 전달받아서 반납시켜 주는 메소드
	public static void close(ResultSet rset) {
		
		try {
			if(rset != null && !rset.isClosed()) { // 얘를 try ~ catch로 묶으면 conn.close()까지 자동 처리됨
				rset.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
	// 3. 전달받은 Connection 객체를 가지고 트랜잭션 처리를 해 주는 메소드
	// 3_1. 전달받은 Connection 객체를 가지고 COMMIT 시켜 주는 메소드
	public static void commit(Connection conn) {
		
		try {
			if(conn != null && !conn.isClosed()) {
				conn.commit();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
	// 3_2. 전달받은 Connection 객체를 가지고 ROLLBACK 시켜 주는 메소드
	public static void rollback(Connection conn) {
		
		try {
			if(conn != null && !conn.isClosed()) {
				conn.rollback();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
}

 

<Run>

<>

<common.JDBCTemplate>

<common.JDBCTemplate>