JDBC

jsbak·2020년 9월 29일
0

참고

목록 보기
2/13

JDBC를 이용한 데이터 베이스 처리 순서

  • 순서 : JDBC드라이버 로딩 -> 해당 DB에 접속 -> 질의(SQL명령을 수행한다) -> 질의 결과를 받아서 처리한다. -> 종료(자원반납)
  1. JDBC 드라이버 로딩(오라클 기준)
    => JDBC드라이버는 DB를 만든 회사에서 제공한다.
    Class.forName("oracle.jdbc.driver.Oracledriver");
  2. 접속하기 : 접속이 성공하면 Connection 객체가 생성된다.
    DriverManager.getConnection()메서드를 이용한다.
  3. 질의 : Statement객체 또는 PrparedStatement객체를 이용하여 SQL문장을 실행한다. ( 접속에 성공하여 얻어온 Connection객체 안에 있는 statement객체를 통해서 질의)
  4. 결과 :
    1) SQL문이 select일 경우 => ResultSet객체가 만들어진다.
    ResultSet객체에는 select한 결과가 저장된다.
    2) SQL문이 insert, update, delete일 경우 => 정수값을 반환한다.
    (정수값은 보통 실행에 성공한 레코드 수를 의미한다.)

public static void main(String args[]) {
	// DB작업에 필요한 객체 변수 선언
    Connection conn = null;
    Statement stmt = null;
    ResultSet rs = null; // 쿼리문이 select일 경우에 사용됨.
	
    try {
    	// 1. 드라이버 로딩(옵션)
        Class.forname("oracle.jdbc.driver.OracleDriver");
        // Class.forName(String) String으로 알려준 해당 클래스의
        // 정보를 담은 Class 클래스가 반환
		
        // 2. DB접속(Connection객체 생성)
        String url = "jdbc:oracle:thin:@localhost:1521/xe";
        String user = "접속할 계정";
        String password = "해당 계정 비밀번호";
        
        conn = DriverManager.getConnection(url, user, password);
        
        // 3. Statement객체 생성 => Connection객체를 이용한다.
        stmt = conn.createStatement();
        
        // 4. SQL문을 Statement객체를 이용하여 실행하고 실행결과를 ResultSet에 저장함.
        String sql = "SELECT * FROM LPROD";
        rs =  stmt.executeQuery(sql);
        /**
         * SQL문이 select일 경우에는 executeQuery()메서드 호출하고,
         * insert, update, delete일 경우에는 executeUpdate()메서드 호출함.
         */
         
         // 5. ResultSet 객체에 저장되어 있는 자료를 반복문과 next()메서드를 
         // 이용하여 차례로 읽어와 처리한다.
         System.out.println("실행한 쿼리문 : " + sql);
         System.out.println("=== 쿼리문 실행 결과 ===");
         
         // rs.next() => ResultSet객체의 데이터를 가리키는 포인터를
         // 		 다음 레코드로 이동시키고 그 곳에 자료가 있으면
         // 		 true, 없으면 false를 반환한다.
         while(rs.next()) {
         // 컬럼의 자료를 가져오는 방법
         // 방법 1) rs.get자료형이름("컬럼명")
         // 방법 2) rs.get자료형이름("컬럼번호") => 컬럼 번호는 1부터 시작
         System.out.println("lprod_id : " + rs.getInt(1));
         System.out.println("lprod_gu : " + rs.getString("lprod_gu"));
         System.our.println("lprod_nm : " + rs.getString("lprod_nm"));
         	System.out.println("-----------------------------------------");
			}
			
			System.out.println("출력 끝...");
			
		}catch(ClassNotFoundException ex) {
			ex.printStackTrace();
		}catch(SQLException ex) {
			ex.printStackTrace();
		}finally {
			// 6. 종료(사용했던 자원을 모두 반납한다.)
			if(rs != null) try {rs.close();}catch(SQLException ex) {}
			if(stmt != null) try {stmt.close();}catch(SQLException ex) {}
			if(conn != null) try {conn.close();}catch(SQLException ex) {}
		}
	}

/**
 * JDBC드라이버를 로딩하고 Connection객체를 생성하는 메서드 제공
 */
public class JDBCUtil {
	static { // 클래스가 로딩되는 시점에 초기화 하는 블럭이다.
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
			System.out.println("드라이버 로딩 완료!!!");
		}catch(ClassNotFoundException ex) {
			System.out.println("드라이버 로딩 실패!!!");
		}
	}
	
	public static Connection getConnection() {
		try {
			return DriverManager.getConnection(
					"jdbc:oracle:thin:@localhost:1521/xe",
					"pc15",
					"java");
		}catch(SQLException e) {
			System.out.println("DB 연결 실패!!!");
			return null;
		}
	}
	
	// 사용한 자원을 반납하는 메서드
	public static void disConnect(Connection conn,
			Statement stmt, PreparedStatement pstmt, ResultSet rs) {
		if(rs != null) try {rs.close();}catch(SQLException ex) {}
		if(stmt != null) try {stmt.close();}catch(SQLException ex) {}
		if(pstmt != null) try {pstmt.close();}catch(SQLException ex) {}
		if(conn != null) try {conn.close();}catch(SQLException ex) {}
	}
	
}

profile
끄적끄적 쓰는곳

0개의 댓글