예외처리(Exception)


1. 프로그램 실행시 발생하는 오류를 붙잡아주는 기능.


오류 - 문법적인 오류(컴파일 단계에서 체크). 실행 오류(실행 단계에서 체크). 예외(실행 단계에서 체크).


예외 - 탐색기에서 CD드라이브를 더블클릭하는 경우 CD의 내용을 나타나기도 하고(예상 결과), CD를 넣으라는 메시지가 나타나기도(예외 상황) 한다.

예외 처리를 하지 않았다면 CD를 넣지 않은 경우 오류 발생하면서 프로그램이 종료되버린다.


2. Exception 클래스 


- ArithmeticException

- ArrayStoreException

- IndexOutOfBoundsException

- ClassCastException

- NullPointerException


3. 예외 처리 형식


try {


//오류 발생 가능성이 있는 실행문;


} catch(예외종류) {

//처리 방법

}



//Exception 처리 없는 경우

//Sample01.java



//Exception 처리 있는 경우

//Sample02.java






try~catch 구문


1. 예외처리를 담당하는 구문. 예외가 발생할 수 있는 부분을 try 블럭으로 감싸주면 예외처리를 할 수 있다.


2. 형식


형식1 -------

try {

//실행문;

} catch(예외종류) {

//예외처리 

}


형식2 -------

try {

//실행문;

} [catch(하위예외) { //예를들어, FileNotFoundException

//예외처리 

} catch(하위예외) { //예를들어, IOException

//예외처리 

}] catch(상위예외) { //예를들어, Exception

//예외처리 

}



형식3 -------

try {

//실행문;

} catch(예외종류) {

//예외처리 

} [finally {

//예외 발생과 관련없이 항상 실행되는 부분;

}]





//예외가 발생해도 프로그램이 중지되지 않도록 하는 방법-예외 처리

//Sample03.java







예외 발생 가능성 확인

-> 메소드 원형에서 예외 가능성과 종류를 확인할 수 있다.


//Integer.parseInt() 메소드에서 예외 종류 확인

//Sample04.java







throws 구문


1. 예외처리를 담당하는 구문. try~catch는 예외 발생시 try~catch 구문이 처리하지만, throws는 예외 발생시 외부에 예외를 넘기게 된다.


2. 형식


접근지정자 반환자료형 메소드이름(매개변수 리스트)  throws 예외종류 {

//실행문;

//예외 발생 가능성이 있는 문장;

return 값;

}



//예외 처리를 throws 구문으로 처리하는 경우







JDBC (Java DataBase Connectivity)


1. 자바 프로그램이 DBMS에 일관된 방식으로 접근할 수 있도록 제공하는 API.


2. JDBC는 데이터베이스에 접속하기 위해서 한 개의 클래스(java.sql.DriverManager)와 두 개의 인터페이스(java.sql.Driver, java.sql.Connection)을 사용한다.


3. 오라클용 JDBC 드라이버(ojdbc14.jar)를 Java/jdk1.7.XX/jre/lib/ext 폴더와 Java/jre7/lib/ext 폴더에 복사할 것. ojdbc14.jar 파일은 오라클 설치 폴더에서 복사할 수 있음.



//오라클 연결 테스트

//Oracle01.java








//연결 전용 클래스 작성

//DBConn.java



//Oracle02.java








SQL 쿼리 전송 테스트1 (scott 계정)


//회원 테이블 생성. 회원번호, 이름, 전화번호. 시퀀스 객체 생성.

CREATE TABLE member (

mid NUMBER --PK

,name VARCHAR2(10)

,tel VARCHAR2(20)

);


ALTER TABLE member

ADD CONSTRAINT member_mid_pk PRIMARY KEY(mid);


CREATE SEQUENCE memberSeq;



//회원 테이블에 자료 입력. INSERT 쿼리.

//쿼리문의 끝에 ; 표시하지 말것.

//INSERT INTO member (mid, name, tel) VALUES (memberSeq.nextval, 'hong', '111-1111')

//Oracle03.java

package com.test;


import java.sql.*;


public class Oracle03 {


public static void main(String[] args) {

try {

//연결

Connection conn = DBConn.getConnection();

//쿼리 준비

//쿼리 작성시 끝에 ; 표시하지 말것.

String sql = String.format("INSERT INTO member (mid, name, tel) VALUES (memberSeq.nextval, 'hong', '111-1111')");

//쿼리 실행

//Java에서 쿼리를 실행하면 

//내부적으로 COMMIT은 자동 실행됨.

//executeUpdate() 메소드는 DML문인 경우만 실행.

Statement stmt = conn.createStatement();

int count = stmt.executeUpdate(sql);

//결과 출력

System.out.printf("%d개의 행이 입력되었습니다. %n"

, count);

}catch(Exception e) {

System.out.println(e.toString());

}


}


}




//회원 테이블 자료 출력. SELECT 쿼리.

//쿼리문의 끝에 ; 표시하지 말것.

//SELECT mid, name, tel FROM member

//Oracle04.java

package com.test;


import java.sql.*;


public class Oracle04 {


public static void main(String[] args) {

try {

//연결

Connection conn = DBConn.getConnection();

//쿼리 준비

//쿼리 작성시 끝에 ; 표시하지 말것.

String sql = String.format("SELECT mid, name, tel FROM member");

//쿼리 실행

//executeQuery() 메소드는 DQL문인 경우만 실행.

Statement stmt = conn.createStatement();

ResultSet rs = stmt.executeQuery(sql); //결과집합

//결과 출력

while(rs.next()) { //row 단위 접근

int mid = rs.getInt("mid"); //column 단위 접근

String name = rs.getString("name");

String tel = rs.getString("tel");

System.out.printf("%d %s %s %n"

, mid, name, tel);

}


//ResultSet 객체 소멸->필수

rs.close();

}catch(Exception e) {

System.out.println(e.toString());

}


}


}






문제) member 테이블의 회원수를 출력하는 프로그램 작성.

//SELECT COUNT(*) AS count FROM member

//Oracle05.java







문제) 이름과 전화번호를 저장하는 JDBC 프로그램 작성. 오라클 이용.

데이터 입력과 INSERT 쿼리 실행을 반복 실행. 입력이 끝나면 SELECT 쿼리와 출력문 실행.


실행 예)

이름 전화번호(1)?홍길동 010-123-1234

이름 전화번호(2)?김길동 010-222-3333

이름 전화번호(3)?-1


----------------------------

전체 회원수 : 2명

----------------------------

회원번호 이름   전화번호

----------------------------

1        홍길동 010-123-1234

2        김길동 010-222-3333

----------------------------


//DBConn.java

package com.test;


import java.sql.*;


public class DBConn {

//Singleton pattern

private static Connection dbConn;

public static Connection getConnection()

throws SQLException, ClassNotFoundException {

if (dbConn == null) {


String url = "jdbc:oracle:thin:@localhost:1521:xe";

String user = "scott";

String pw = "tiger";

Class.forName("oracle.jdbc.driver.OracleDriver");

dbConn = DriverManager.getConnection(url, user, pw);


}

return dbConn;

}

public static void close()

throws SQLException {

if (dbConn != null) {

if (!dbConn.isClosed()) {

dbConn.close();

}

}

dbConn = null;

}

}




//Oracle06.java


WRITTEN BY
빨강꼬마

,