728x90

 

JDBC로 DB를 연결해서 DB연동 하고 있는 상태이고

반복적으로 사용되는 기능인 close와 transanction 같은 것들을 따로 Template클래스로 빼두어

import만하면 쉽게 사용할수 있게 코드가 구성되었고

db의 트랜잭션(commit & rollback)과

jdbc의 클래스 Connection, Statement, ResultSet의 close 기능 메소드를 만들었고

PreparedStatement는 Statement의 자식 클래스이기 때문에 다형성으로 인해 부모타입은 자식 객체를 다 받을 수 있으므로 해줄 필요 x

 

package common;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

public class JDBCTemplate {


	// commit()
	public static void commit(Connection conn) {
		try {
			if(conn != null && !conn.isClosed()) { // conn.isClosed()은 SQLException 필요함
				conn.commit();
			}	
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
	// rollback()
	public static void rollback(Connection conn) {
		try {
			if(conn != null && !conn.isClosed()) { // conn.isClosed()은 SQLException 필요함
				conn.rollback();
			}	
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
	// Connection의 close처리
	public static void close(Connection conn) {
		try {
			if(conn != null && !conn.isClosed()) { // conn.isClosed()은 SQLException 필요함
				conn.close();
			}	
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
	// ResultSet의 close처리
//	public static void close(ResultSet rset) { 
//		// close(ResultSet rset)만 적었는데 위의 close와 다르게 에러 안나는 이유
//		// 답 : 오버로딩이 적용되었기 때문
//	}
	public static void close(ResultSet rset) { 
		try {
			if(rset != null && !rset.isClosed()) { // conn.isClosed()은 SQLException 필요함
				rset.close();
			}	
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
	// Statement의 close처리
	public static void close(Statement stmt) { 
		try {
			if(stmt != null && !stmt.isClosed()) {
				stmt.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	
}

 

728x90
반응형

+ Recent posts