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(중복정의)
}
}