국비 29-1

냐아암·2023년 5월 26일
0

국비

목록 보기
40/114

JDBC 관련 JavaAPI (java.sql 패키지)

API(Application Programming Interface)
프로그래밍 언어에서 사용자들이 사용할 수 있는 기술

  • Connection : DB 연결 정보를 담은 객체
    -> Java와 DB 사이를 연결 해주는 일종의 통로

  • Statement : 객체를통해 Java에서 작성된 SQL을 DB로 전달하여 수행한 후 결과를 반환 받아 다시 Java로 돌아오는 역할의 객체

  • ResultSet : Select 질의 성공 시 반환되는 결과 행의 집합(Result set)을 나타내는 객체

         

JDBCExample1

package edu.kh.jdbc.ex1;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class JDBCExample1 {

	public static void main(String[] args) {
		
		  // JDBC : java가 DB와 연결할 수 있게 해주는 java API
	      
	      // [1단계] : JDBC 객체 참조 변수 선언 (java.sql 패키지)
	      
	      Connection conn = null;
	      // DB 연결 정보를 담은 객체
	      // -> Java와 DB 사이를 연결 해주는 일종의 통로(Stream과 비슷하게 생김)
	      
	      Statement stmt = null;
	      // Connection 객체를통해
	      // Java에서 작성된 SQL을 DB로 전달하여 수행한 후
	      // 결과를 반환 받아 다시 Java로 돌아오는 역할의 객체

	      ResultSet rs = null;
	      //Select 질의 성공 시 반환되는
	      // 결과 행의 집합(Result set)을 나타내는 객체
	      
	      try {
			
	    	  // [2단계] 참조변수에 알맞은 객체 대입하기
	    	  
	    	  // 1. DB 연결에 필요한 Oracle JDBC Driver 메모리 로드하기
	    	  // --> Oracle JDBC Driver가 어디에 있는지만 알려주면 알아서 메모리 로드
	    	  // (생략도 가능)
	    	  
	    	  Class.forName("oracle.jdbc.driver.OracleDriver");
	    	  // ClassNotFoundException 발셍 가능성이 있음 
	    	  
	    	  // 2. 연결 정보를 담은 Connection을 생성
	    	  //    (이때 DriverManager 객체가 필요함)
	    	  // 	 DriverManager: JDBC 드라이버를 통해 Connection 객체를 만드는 역힐
	    	  
	    	  String type = "jdbc:oracle:thin:@"; //JDBC 드라이버가 thin 타입
	    	  
	    	  String ip = "localhost"; //DB서버 컴퓨터 IP
	    	  // localhost == 127.0.0.1
	    	  
	    	  String port = ":1521"; // 본인 호트 번호 작성(sql)
	    	  
	    	  String sid = ":xe"; // DB이름
	    	  
	    	  String user = "khj"; // 사용자 명
	    	  
	    	  String pw = "khj1234";
	    	  
	    	  
	    	  conn = DriverManager.getConnection(type + ip + port + sid, user, pw);
	    	  									//jdbc:oracle:thin:@localhost:1521:xe
	    	  
	    	  // 중간 확인
	    	  System.out.println(conn); //oracle.jdbc.driver.T4CConnection@4961f6af
	    	  
	    	  // 3. Statement 객체에 적재할 SQL 작성하기
	    	  // ***** JAVA에서 작성된 SQL문은 마지막에 ;(세미콜론을 찍지 않아야 한다) *****
	    	  // -> "유효하지 않은 문자" 오류를 발생시킴
	    	  
	    	  String sql = "SELECT EMP_ID, EMP_NAME, SALARY, DEPT_CODE FROM EMPLOYEE";
	    	  // SELECT 안에 세미콜론 쓰지 않기!!!!!!!
	    	  
	    	  // 4. Statement 객체 생성
	    	  stmt = conn.createStatement();
	    	  
	    	  // 5. SQL을 Statement에 적재 후 
	    	  //	DB로 전달하여 수행한 후
	    	  //	결과를 반환받아와 rs 변수에 대입
	    	  
	    	  rs = stmt.executeQuery(sql);
	    	  // DB에서 SELECT 수행한 결과 (Result Set) 객체를 얻어와 rs가 참조하게 한다.
	    	  
	    	  // [3단계] SELECT 수행 결과를 한 행씩 접근하여
	    	  //		원하는 컬럼값 얻어오기
	    	  
	    	  while(rs.next()) {
	    		  
	    		  // rs.next(): 참조하고 있는 Resultset 객체의
	    		  //			첫 번째 컬럼부터 순서대로 한 행씩 이동하며
	    		  //			다음 행이 있을 경우 true 반환
	    		  
	    		  // rs.get[Type]("컬럼명"): 현재 가리키고 있는 행의 특정 컬럼 값을 얻어옴
	    		  // [type]은 DB에서 얻어와서 Java에 저장할 자료형(Java쪽 자료형)
	    		  
	    		  int empId = rs.getInt("EMP_ID");
	    		  String empName = rs.getString("EMP_NAME");
	    		  int salary = rs.getInt("SALARY");
	    		  String deptCode = rs.getString("DEPT_CODE");
	    		  
	    		  // 조회결과 출력
	    		  System.out.printf("사번: %d 이름 : %s 급여 : %7d 부서코드: %s\n",
	    				  			empId, empName, salary, deptCode);
	    		  
	    	  }
	    	  
		}catch (SQLException e) {
			//SQLException: DB 연결관련 예외의 최상위 부모
			e.printStackTrace();
		}catch (ClassNotFoundException e) {
			System.out.println("OJDBC 라이브러리 미등록 또는 경로 오타");
			e.printStackTrace();
		}finally {
			
			// [4단계] 사용한 JDBC 객체 자원 반환 (close)
			// -> 자원 반환 순서는 객체 생성 순서의 "역순"으로
			// 생성 순서: Connection, Statement, ResultSet
			// 반환 순서: ResultSet, Statement, Connection
			
			try {
				// NullPointerException 방지를 위한 if문 추가
				if(rs != null) rs.close();
				if(stmt != null) stmt.close();
				if(conn != null) conn.close();
				
			} catch (SQLException e) {
				e.printStackTrace();
			}
			
		}
	      
	}

}
profile
개발 일지

0개의 댓글