JDBC에서 연결, 자원반환같은 공통 메서드들을

 

미리 템플릿으로 만들어 놓으면 편하게 사용이 가능하다.

 

1. Connection 객체 생성+DB연결  메서드를 템플릿으로 

2. 만들어진 객체의 close 구문 (CONNECTION , STATEMENT , RESULTSET)

3. Connection 객체로 수행할 rollback,  commit 구문

을 만들어 추출한다 (PreparedStatement 는 다형성으로 Statement 에 들어간다)

 

import java.io.FileInputStream;
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 {
	// DB 연결, JDBC 자원 반환 같은 JDBC 공통내용 추출 클래스
	
	/*
	 * 1. Connection 객체 생성해서 반환
	 * 2. 전달 받은 JDBC 객체 자원 반환 (close)
	 * 3. 트랜잭션 제어구문(commit ,rollback)
	 * */
	
	private static Connection conn = null;
	//객체 생성을 하지 않아도 되는 변수
	//단 , 외부로부터 직접 접근은 차단
	//DB 연결 정보를 담고있는 Connection 객체 반환용 메서드
	
	public static Connection getConnection() {
		
		//이전에 생성된 Connection이 있고, close() 되지 않았을 경우
		// 이전 Connection을 재활용하고
		// 이전 생선된 Connection이 없거나 close 되었으면
		// 새로운 Connection을 반환
		// why?
		/* => 우리는 한 프로그램에 여러명이 접속하는 형태를 만들 예정
		 * 그러므로 객체가 계속해서 생성되면 과부하가 걸림
		 * =>접속한 사람 당 커넥션을 1개씩만 만들 수 있게 함
		 * */
		

		//DB연결 정보는 변경될 가능성이 있는데 그 때마다 컴파일 하는 것은 시간 낭비 심함
		//값 변해도 컴파일 다시 안해도 되도록 파일을 읽는 방식으로 수정
		//= 파일 내용만 변경하도록
		//XML 형식(DB연결 정보를 xml 파일에 별도로 작성해서 읽어오는 식)
		//---->확장 가능한 마크업 랭귀지 
		//== 프로그래밍 언어와 상관 없이 데이터를 저장, 전달 가능한 파일
		//요즘은 jason
		//XML에 작성된 DB 연결 정보를 Properties라는 객체를 이용해 얻어올 예정
		//Properties : 컬렉션 중 Map<K,V> 후손 클래스
		// K, V가 모두 String으로 제한된 Map
		// 장점: 파일입출력에 특화되어있음
		
		try {//isClosed : 커넥션 객체가 close() 된적 있으면 true;
			
//			xml 읽어와 저장할 Properties
			Properties prop = new Properties();
			//driver.xml 읽어오기
			prop.loadFromXML(new FileInputStream("driver.xml"));//try 안에 쓰기
			
			
			if(conn ==null || conn.isClosed()) {
				Class.forName(prop.getProperty("driver"));
				
				conn = DriverManager.getConnection(prop.getProperty("url"), prop.getProperty("dbId"), prop.getProperty("dbPw"));
				conn.setAutoCommit(false);
				//자동 커밋 기능 off
				//(주의사항) conn.close()가 수행되는 경우 자동으로
				//commit() 이 수행된다.
				//->conn.close() 호출 전에 트랜잭션 제어 구문을 작성해야 된다
				//그러므로 conn.close 호철 전에 트랜잭션 제어 구문을 작성해야 한다.
			}
		}catch(Exception e) {
			e.printStackTrace();
		}
		return conn;
	}
	//Statement 객체 반환 메서드
	public static void close(Statement stmt) {
		
		try {
			if(stmt!=null && !stmt.isClosed()) {
			stmt.close();}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	public static void close(ResultSet rs) {
		
		try {
			if(rs!=null && !rs.isClosed()) {
			rs.close();}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	public static void close(Connection conn) {
		
		try {
			
			if(conn!=null && !conn.isClosed()) {
			conn.close();}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
//	commit 메서드
	public static void commit(Connection conn) {
		
		try {
			
			if(conn!=null && !conn.isClosed()) {
			conn.commit();}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	public static void rollback(Connection conn) {
		
		try {
			
			if(conn!=null && !conn.isClosed()) {
			conn.rollback();}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
}

 

 

'개발자로 업그레이드 되자 > JDBC' 카테고리의 다른 글

JDBC 정리 (1) UPDATE  (0) 2021.10.09
JDBC 정리 (0) 연결, SELECT  (0) 2021.10.08

+ Recent posts