JDBC

H4-2. 0722_ JDBC 연동, 예외처리(throws Exception)와 try-catch절

55yudi 2021. 10. 31. 15:50

- JDBC에 SQL파일(.jar)을 가져와서 연동시킴

package myjdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Calendar;

public class JDBCTest1 {

	public static void main(String[] args) throws ClassNotFoundException, SQLException {
		//컴파일 : 텍스트로 돼있는 소스파일을 .클래스파일로 만드는 과정
		Class.forName("oracle.jdbc.driver.OracleDriver");
		//forName이 static이라서 따로 객체를 생성하지 않고 바로 호출해도 된다
		//1.오류가 왜 날까? --> 예외를 처리하지 않아서
		//2.예외를 왜 처리해야 할까? --> forName메서드가 throws절로 정의되어 있어서 예외처리를 요구하기 때문에
		//3.예외처리는 뭔데? 어떻게 하는데? --> throw절, try-catch
		
		//Calendar cal = Calendar.getInstance(); //cal: 캘린더 타입의 지역변수
		
		Connection con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","hr","hr");
		//인터페이스   변수   클래스          static 함수       url                                user  pw
		String sql = "select * from employees";
		Statement stmt = con.createStatement();
		//인터페이스   변수  Connection에 들어있는 변수   함수 (c.f.(대문자)클래스명.함수일때만 static함수임)
		//				(객체 주소를 담는다)
		ResultSet rs = stmt.executeQuery(sql);
		//인터페이스  변수  Statement리턴타입을 갖는 변수  함수
		//리턴타입은 어디서 나온거지
		
		while(rs.next()) { //false가 될 때까지 루프를 반복하면서 결과를 보여줌
			//next() : ResultSet 클래스 안에 있는 함수, 리턴타입은 boolean(true/false)
			String result = rs.getString(1);//값에 따라 sql 테이블의 열값이 나옴
		
			System.out.println(result);
		
		}
		rs.close();
	}

}

 

- Overloading(중복 정의) : 이름이 같은 함수를 여러 개 만든 것


[예외처리]

 

- 예외처리를 하는 법 : throws절, try-catch절

  * throws Exception 

    - throws : 메서드 선언부에 위치

    - throw : 메서드 안에 처리

    - 정의된 메서드에 throws절이 이미 정의되어 있으면 반드시 예외처리할 것

      = 왜 예외처리를 해줘야 하는가? -> 정의된 메서드에 이미 throws절이 정의되어 있기 때문에

 

  * try-catch절(-finally)

    - try 블록 : 예외 발생가능 코드를 작성하는 곳

                   예외 발생 시 발생지점에서 catch 블록으로 바로 이동

    - catch 블록 : 예외 발생 시 예외 처리 코드를 작성하는 곳

                      예외가 발생하지 않으면 넘어간다.

    - finally 블록 : 예외 발생 여부와 상관없이 항상 실행해야 할 내용을 작성하는 곳

                       생략이 가능하다.

 

package myjdbc;

public class ExceptionTest { //예외처리는 throws절 또는 try-catch문으로 한다.

	public static void main(String[] args) {
		print(-5); // '정의되지 않은 함수를 호출'해서 오류가 난다라고 말하라고!!!! ㅡㅡ개싫어 강사놈
				//-5 를 쓰고 오류난 이유 : throws절로 정의된 메서드를 호출하려면 예외를 처리해야 한다.
				//run time예외와 compile time예외(두 종류!)가 있다.
		System.out.println("1");
		System.out.println('1');
		//println이라는 메소드가 오버로딩되어 있다.
		//문자열(String)을 매개변수로 받는 println과, 문자(char)를 매개변수로 받는 println이 따로 정의되어 있다.

	}

	private static void print(int count) throws RuntimeException {
		if(count < 0) {
			throw new RuntimeException("매개변수는 마이너스가 안됩니다.");
		}
		for(int i = 0; i < count; i++) {
			System.out.println("Hello");
		}
		
	}
	
	private static void print() { //이름이 같은 함수를 여러 개 만드는 것 = overloading(중복정의)
		
	}

}