[JDBC] TIL 024 - 23.08.14

유진·2023년 8월 14일
0

  • API = Application Programming Interface
    • Scanner (java.util)
    • List (java.util)
    • String (java.lang)
    • InputStream (java.io)
  • JDBC (java.sql)

-API -> 자바 회사에서 제공하는 기능
-Library -> 소수집단(ex. 회사)이 Java를 이용해서 만든 기능

  • 우리는 Oracle JDBC Driver(OJDBC) 사용 = 오라클에서 자바랑 연결하고 싶어서 만든 라이브러리

OJDBC 다운로드 SITE
https://mvnrepository.com/

[OJDBC11 다운로드 순서]

  1. OJDBC11 검색
  2. Usages 다운로드가 많은 것으로 다운받기
  3. jar (자바 아카이브) 다운로드 받기(압축 풀지 않아도 됨)
  4. 다운로드 파일 -> tools 파일에 정리

[OJDBC11 실행 순서]

  1. eclipse 실행
    경로 -> C:\workspace\3_JDBC

    cf) 참고해야 할 사항!

  2. Project Explorer 창 우클릭
  3. Properties 클릭
  4. Java Build Path 클릭
  5. Libraries 창 클릭
  6. Classpath 클릭 -> 오른쪽 버튼들 활성화
  7. Add External JARs 클릭
  8. ojdbc11-21.5.0.0 파일 열기
  9. 하단의 사진처럼 나오면 성공

예제 1)

package edu.kh.jdbc1;

import java.sql.Connection;
import java.sql.Date;
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 Programming API (Java에 기본 내장된 인터페이스)
		// java.sql 패키지에서 제공
		
		// * JDBC를 이용한 애플리케이션을 만들때 필요한 것
		// 1. Java의 JDBC 관련 인터페이스
		// 2. DBMS(Oracle)
		// 3. Oracle에서 Java 애플리케이션과 연결할 때 사용할
		// 	  JDBC를 상속받아 구현한 클래스 모음 (ojdbc11.jar 라이브러리)
		//		-> OracleDrive.class 이용 (JDBC 드라이버)
		
		
		// 1단계 : JDBC 객체 참조 변수 선언 (java.sql 패키지의 인터페이스)
		
		Connection conn = null;
		// DB 연결 정보를 담은 객체
		// -> DBMS 타입, 이름, IP, Port, 계정명, 비밀번호 저장
		// -> DBeaver의 계정 접속 방법과 유사함
		// * Java와 DB 사이를 연결해주는 통로
		
		
		Statement stmt = null;
		// Connection을 통해
		// SQL 문을 DB에 전달하여 실행하고
		// 생성된 결과 (ResultSet, 성공한 행의 개수)를 반환(Java)하는데 사용되는 객체
		
		
		ResultSet rs = null;
		// SELECT 질의 성공시 반환되는데
		// 조회 결과 집합을 나타내는 객체
		
		
		try {
			// 2단계 : 참조변수에 알맞은 객체 대입
			
			// 1. DB 연결에 필요한 Oracle JDBC Driver 메모리에 로드하기
			// 런타임 시점에 해당 경로의 클래스를 동적으로 로드함
			Class.forName("oracle.jdbc.driver.OracleDriver");
			// -> () 안에 작성된 클래스의 객체를 반환
			// -> 메모리에 객체가 생성되어지고 JDBC 필요 시 알아서 참조하여 사용
			// --> 생략해도 자동으로 메모리 로드가 진행됨(명시적으로 작성하는걸 권장)
			
			// 2. 연결정보를 담은 Connection을 생성
			// -> DriverManager 객체를 이용해서 Connection 객체를 만들어 얻어옴!
			
			String type = "jdbc:oracle:thin:@"; // JDBC 드라이버 종류
			String ip = "localhost"; // DB 서버 컴퓨터 IP
			// == 127.0.0.1 (loop back ip)
			
			String port = ":1521"; // 포트번호
			// 1521 (기본값)
			
			String sid = ":XE"; // DB 이름
			
			String user = "kh"; // 사용자 계정
			
			String pw = "kh1234"; // 비밀번호
			
			// DriverManager :
			// 메모리에 로드된 JDBC 드라이버를 이용해서
			// Connection 객체를 만드는 역할.
			//getConnection(연결정보);
			conn = DriverManager.getConnection(type+ip+port+sid, user, pw);
			// url == jdbc:oracle:thin:@localhost:1521:XE
			
			// 중간확인
			//System.out.println(conn); // oracle.jdbc.driver.T4CConnection@131ef10
			
			// 3. SQL 작성
			// ** JAVA에서 작성되는 SQL은 마지막에 ; 을 찍으면 안된다!!! **
			String sql = "SELECT EMP_ID, EMP_NAME, SALARY, HIRE_DATE FROM EMPLOYEE";
			
			// 4. Statement 객체 생성
			// -> Connection 객체를 통해서 생성
			stmt = conn.createStatement();
			
			
			// 5. 생성된 Statement 객체에
			// sql 을 적재하여 실행한 후
			// 결과를 반환받아와서
			// rs 변수에 저장
			rs = stmt.executeQuery(sql);
			// executeQuery() : SELECT문 수행 메서드, ResultSet반환
			
			
			
			// 3단계 : SQL을 수행해서 반환 받은 결과(ResultSet)를
			//		한 행씩 접근해서 컬럼값 얻어오기
			
			while(rs.next()) {
				// rs.next() : rs가 참조하고있는 ResultSet 객체의
				//			첫 번째 컬럼부터 순서대로 한 행씩 이동하며
				// 			다음 행이 있을 경우 true 없으면 false 반환
				
				// rs.get자료형("컬럼명")
				String empId = rs.getString("EMP_ID");
				// 현재 행의 "EMP_ID" 문자열 컬럼의 값을 얻어옴
				
				String empName = rs.getString("EMP_NAME");
				
				int salary = rs.getInt("SALARY");
				
				// java.sql.Date
				Date hireDate = rs.getDate("HIRE_DATE");
				
				
				System.out.printf("사번 : %s / 이름 : %s / 급여 : %d / 입사일 : %s \n",
									empId, empName, salary, hireDate.toString()
						);
				
				// java.sql.Date 의 toString()은 yyyy-mm-dd 형식으로 오버라이딩 되어있음.
			}
			
			
		} catch(ClassNotFoundException e) {
			System.out.println("JDBC 드라이버 경로가 잘못 작성되었습니다.");
			
		} catch(SQLException e) {
			//SQLException : DB 관련 최상위 예외
			e.printStackTrace();
		} finally {
			
			// 4단계 : 사용한 JDBC 객체 자원 반환 ( close() )
			// ResultSet, Statement, Connection (생성 역순으로 닫는것을 권장)
			try {
				if(rs != null) rs.close();
				if(stmt != null) stmt.close();
				if(conn != null) conn.close();
			
			} catch(SQLException e) {
				e.printStackTrace();
			}
			
		}
		
		
		
	}

}
예제 2)

package edu.kh.jdbc1;

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

public class JDBCExample2 {
	
	public static void main(String[] args) {
		
		// 1단계 : JDBC 객체 참조변수 생성(java.sql)
		Connection conn = null;
		Statement stmt = null;
		ResultSet rs = null;
		
		Scanner sc = new Scanner(System.in);
		
		try {
			// 2단계 : 참조변수에 알맞은 객체 대입
			Class.forName("oracle.jdbc.driver.OracleDriver");
			
			String type = "jdbc:oracle:thin:@"; // JDBC 드라이버 종류
			String ip = "localhost";
			String port = ":1521";
			String sid = ":XE"; // DB 이름
			String user = "kh"; // 사용자 계정
			String pw = "kh1234"; // 비밀번호
			
			conn = DriverManager.getConnection(type+ip+port+sid, user, pw);
			
			System.out.println("<입력 받은 급여보다 많이 받는(초과) 직원만 조회>");
			System.out.print("급여 입력 : ");
			
			int input = sc.nextInt();
			
			String sql = "SELECT EMP_ID, EMP_NAME, SALARY FROM EMPLOYEE WHERE SALARY > " + input;
			
			stmt = conn.createStatement();
			
			rs = stmt.executeQuery(sql);
			
			// 3단계 : SQL을 수행해서 반환받은 결과(ResultSet)를
			//			한 행씩 접근해서 컬럼값 얻어오기
			
			while(rs.next()) {
				
				String empId = rs.getString("EMP_ID");
				String empName = rs.getString("EMP_NAME");
				int salary = rs.getInt("SALARY");
				
				System.out.printf("사번 : %s / 이름 : %s / 급여 : %d \n",
										empId, empName, salary);
				
			}
			
			
		} catch(Exception e) {
			e.printStackTrace();
		} finally {
			// 4단계 : 사용한 JDBC 객체 자원 반환
			
			try {
				if(rs != null) rs.close();
				if(stmt != null) stmt.close();
				if(conn != null) conn.close();
				
			}catch(Exception e) {
				e.printStackTrace();
			}
		}
		
		
		
	}

}
예제 3) 혼자 연습해보기

package edu.kh.jdbc1;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Scanner;

public class JDBCTest6 {
	
	public static void main(String[] args) {
		
		Connection conn = null;
		
		Statement stmt = null;
		
		ResultSet rs = null;
		
		Scanner sc = new Scanner(System.in);
		
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
			
			String url = "jdbc:oracle:thin:@localhost:1521:XE";
			
			String id = "workbook";
			
			String pw = "workbook";
			
			conn = DriverManager.getConnection(url, id, pw);

			stmt = conn.createStatement();
			
			System.out.println("메뉴 id를 입력하세요.");
			System.out.print("메뉴 id 입력 : ");
			String menuId = sc.nextLine();
			
			System.out.println("메뉴 이름을 입력하세요.");
			System.out.print("메뉴 이름 입력 : ");
			String menuName = sc.nextLine();
			
			System.out.println("메뉴 가격을 입력하세요.");
			System.out.print("메뉴 가격 입력 : ");
			int menuPrice = sc.nextInt();
			sc.nextLine();
			
			String sql = "INSERT INTO TB_MENU VALUES('" + menuId + "', '" + menuName + "', " + menuPrice + ")";
			System.out.println(sql);
			
			int result = stmt.executeUpdate(sql);
			
			if(result > 0) {
				System.out.println("성공~");
			}
			
			sql = "SELECT MENU_ID, MENU_NAME, MENU_PRICE FROM TB_MENU";
			
			rs = stmt.executeQuery(sql);
			
			while(rs.next()) {
				String menuId1 = rs.getString("MENU_ID");
				String menuName1 = rs.getString("MENU_NAME");
				String menuPrice1 = rs.getString("MENU_PRICE");
				
				System.out.println(menuId1 + " " + menuName1 + " " + menuPrice1);
				
			}
			
			
		} catch(Exception e) {
			e.printStackTrace();
			
		} finally {
			
			try {
				if(rs != null) rs.close();
				if(stmt != null) stmt.close();
				if(conn != null) conn.close();
				
			} catch(Exception e) {
				e.printStackTrace();
			}
		}
	}

}

0개의 댓글