DB

JDBC 주요 API

짱코딩러 2022. 8. 10. 16:14

 

 

주요 API

1. Connection 인터페이스

  • 자바프로그램과 데이터베이스간의 연결을 담당하는 객체다.
  • Statement createStatement() SQL전송을 담당하는 Statement객체를 말한다
  • PreparedStatement prepareStatement(String sql) SQL전송을 담당하는 Statement객체를 반환한다.
  • void commit() SQL실행결과를 DB에 반영시킨다.
  • void rollback() SQL실행결과의 DB반영을 취소시킨다.
  • void close() DB와의 접속을 해제한다.

 

2. Statement 인터페이스

  • SQL의 전송을 담당하는 객체다.
  • int executeUpdate(String sql) INSERT, UPDATE, DELETE 쿼리를 DB로 전송하고, 실행결과를 반환한다.
  • ResultSet executeQuery(String sql) SELECT 쿼리를 DB로 전송하고, 조회결과를 반환한다.
  • void close() DB 연결 자원을 해제한다.

 

3. PreparedStatement 인터페이스

  • SQL의 전송을 담당하는 객체다.
  • int executeUpdate() INSERT, UPDATE, DELETE 쿼리를 DB로 전송하고, 실행결과를 반환한다.
  • ResultSet executeQuery() SELECT 쿼리를 DB로 전송하고, 조회결과를 반환한다.
  • void setXXX(int index, XXX value) 파라미터값(?, ?, ?, ?, ? 위치에 실제값)을 설정한다. void setString(int index, String value)void setInt(int index, int value)void setDouble ( int index, double value)
  • void setDate( int index, Date value)
  • void setLong(int index, long value)
  • void close() DB 연결 자원을 해제한다.

 

4. ResultSet 인터페이스

  • SELECT 쿼리문의 조회결과를 담당하는 객체다
  • boolean next() 커서를 다음행으로 이동시킨다. 데이터행이 존재하면 true를 반환한다. 시작위치는 첫번째행 앞이다
  • XXX getXXX(String columnName) 컬럼명에 해당하는 값을 반환한다.
  • void close() DB 연결 자원을 해제한다.

 

5. DriverManager 클래스

  • JDBC 표준을 구현한 JDBC드라이버를 관리하는 클래스다.위에 언급한 인터페이스를 구현한 클래스들의 모음이다.
  • Connection객체를 반환한다.
  • *JDBC드라이버는 각 DBMS제작사가 자사의 DBMS에 엑세스 할 수 있도록
  • Connection getConnection(String url, String username, String password)
  • *url이 가르키는 데이터베이스에 지정된 계정정보로 연결을 담당하는 클래스

 

 

JDBC 템플릿

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();
		}
	}
	
}