본문 바로가기

기타

[JDBC] JDBC Template

JDBC Template

JDBC 절차 중 반복적으로 쓰이는 구문들을 각각의 메소드로 정의해둔 클래스
- 재사용할 목적으로 작성,  공통 템플릿 작업 진행시 사용
-  해당 클래스의 모든 메소드는 static메소드임

<MVC패턴의 JDBC 절차 중 반복되는 구문>
1. DB와 접속된 CONNECTION객체를 생성 후 반환하는 구문 
    (Class.forName(), DriverManager.getConnection() )
2. 전달받은 Connection객체를 가지고 트랜젝션 처리를 해주는 메소드
    (conn.commit(), conn.rollback()  )
3. 전달받은 JDBC용 객체를 반납시켜주는 메소드 (각 객체별로)
    ( conn.close(), stmt.close(), pstmt.close(),  rset.close() )

* 싱글톤 패턴: 메모리영역에 단 한 번만 올라간 것을 재사용한 개념

 

//1. DB와 접속된 CONNECTION객체를 생성 후 반환해주는 메소드 
	public static Connection getConnection() {
	  // Connection 객체를 담을 변수
		Connection conn = null;
	 // 1,2 : 드라이버 등록 및 연결
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
			conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","JDBC", "JDBC");		
			conn.setAutoCommit(false);
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return conn;
	}
	
// * 2. 전달받은 Connection객체를 가지고 트랜젝션 처리를 해주는 메소드
// 2-1 전달받은 Connection객체로 Commit
	
	public static void commit(Connection conn) {
		
		try {			
			if (conn != null && !conn.isClosed())
			// Connection클래스 isClose커넥션이 닫혀있으면 t, 열려있으면 f
			// connection 이 null이 아니고 connection 객체가 열려있으면
				conn.commit();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
	}
	// 2-1 전달받은 Connection객체로 Rollback
	public static void rollback(Connection conn) {
			
		try {
			if (conn != null && !conn.isClosed()) {			
			conn.rollback();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
// 3. 전달받은 JDBC용 객체를 반납시켜주는 메소드 (각 객체별로)
// 3-1  전달받은 Connection객체를 반납하는 메소드	
	public static void close(Connection conn) {
		
		try {
			if (conn !=null && !conn.isClosed()) {
				conn.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}		
	}
	
// 3-2  전달받은 Statement객체를 반납하는 메소드	 -- 오버로딩 적용하기 (같은 이름, 다른 매개변수 자료형)	
// 다형성이 적용되어 PreparedStatement는 해당 메소드를 상속받아 사용 가능, 재정의 필요없음
	public static void close(Statement stmt) {
		
		try {			
			if (stmt !=null && !stmt.isClosed()) {
				stmt.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}			
	}	
	
	// 3-2  전달받은 Resultset객체를 반납하는 메소드	 -- 오버로딩 적용하기 (같은 이름, 다른 매개변수 자료형)	
	public static void close(ResultSet rset) {
	
		try {			
			if(rset !=null && !rset.isClosed()) {
				rset.close();			
			}			
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}	
}