오라클 JDBC 테스트
오라클 JDBC 드라이버를 클래스패스에 추가하여 테스트하기
자바 JDBC 프로그래밍을 하기 위해서는 데이터베이스에 맞는 JDBC드라이버를 설치해야 한다.
오라클 JDBC드라이버는
 
C:\oraclexe\app\oracle\product\11.2.0\server\jdbc\lib
에서 찾을 수 있다.
디렉토리에 있는 파일 중 ojdbc6.jar 가 우리가 사용할 JDBC 드라이버이다.
다음 JDBC 테스트 파일은 scott 계정의 EMP 테이블의 모든 레코드를 가져와 출력하는 프로그램이다.
아래 파일을 메모장에서 작성하고 C:/ 에 GetEmp.java라는 파일명으로 저장한다.
GetEmp.java
import java.sql.*; 
public class GetEmp {
	public static void main(String[] args) {
		String DB_URL = "jdbc:oracle:thin:@127.0.0.1:1521:XE";
		String DB_USER = "scott";
		String DB_PASSWORD = "tiger";
		Connection conn = null;
		Statement stmt = null;
		ResultSet rs = null;
		String query = "SELECT * FROM emp";
		try {
			// 드라이버를 로딩한다.
			Class.forName("oracle.jdbc.driver.OracleDriver");
		} catch (ClassNotFoundException e ) {
			e.printStackTrace();
		}
		try {
			// 데이터베이스의 연결을 설정한다.
			conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD);
			// Statement를 가져온다.
			stmt = conn.createStatement();
			// SQL문을 실행한다.
			rs = stmt.executeQuery(query);
			while (rs.next()) { 
				String empno = rs.getString(1);
				String ename = rs.getString(2);
				String job = rs.getString(3);
				String mgr = rs.getString(4);
				String hiredate = rs.getString(5);
				String sal = rs.getString(6);
				String comm = rs.getString(7);
				String depno = rs.getString(8);
				// 결과를 출력한다.
				System.out.println( 
					empno + " : " + ename + " : " + job + " : " + mgr
					+ " : " + hiredate + " : " + sal + " : " + comm + " : "
				+ depno); 
			}
		} catch ( Exception e ) {
			e.printStackTrace();
		} finally {
			try {
				// ResultSet를 닫는다.
				rs.close();
				// Statement를 닫는다.
				stmt.close();
				// Connection를 닫는다.
				conn.close();
			} catch ( SQLException e ) {}
		}
	} // main()의 끝
} // 클래스의 끝
컴파일하고 실행시키면 다음과 같은 결과가 나와야 한다.
C:\>set classpath=.;C:/oraclexe/app/oracle/product/11.2.0/server/jdbc/lib/ojdbc6.jar C:\>javac GetEmp.java C:\>java GetEmp 7369 : SMITH : CLERK : 7902 : 1980-12-17 00:00:00.0 : 800 : null : 20 7499 : ALLEN : SALESMAN : 7698 : 1981-02-20 00:00:00.0 : 1600 : 300 : 30 7521 : WARD : SALESMAN : 7698 : 1981-02-22 00:00:00.0 : 1250 : 500 : 30 7566 : JONES : MANAGER : 7839 : 1981-04-02 00:00:00.0 : 2975 : null : 20 7654 : MARTIN : SALESMAN : 7698 : 1981-09-28 00:00:00.0 : 1250 : 1400 : 30 7698 : BLAKE : MANAGER : 7839 : 1981-05-01 00:00:00.0 : 2850 : null : 30 7782 : CLARK : MANAGER : 7839 : 1981-06-09 00:00:00.0 : 2450 : null : 10 7839 : KING : PRESIDENT : null : 1981-11-17 00:00:00.0 : 5000 : null : 10 7844 : TURNER : SALESMAN : 7698 : 1981-09-08 00:00:00.0 : 1500 : 0 : 30 7900 : JAMES : CLERK : 7698 : 1981-12-03 00:00:00.0 : 950 : null : 30 7902 : FORD : ANALYST : 7566 : 1981-12-03 00:00:00.0 : 3000 : null : 20 7934 : MILLER : CLERK : 7782 : 1982-01-23 00:00:00.0 : 1300 : null : 10
- String DB_URL = "jdbc:oracle:thin:@127.0.0.1:1521:XE"
- 
jdbc:oracle:thin은 사용하는 JDBC드라이버가 thin 타입을 의미한다.
 1521 은 오라클 리슨너(listener)의 포트번호이다.
 (listener 는 오라클에서 오라클과 외부 애플리케이션과의 통신 역활을 한다.)
 127.0.0.1 은 데이터베이스가 설치되어 있는 서버의 IP 이다.
 XE 은 SID 이름이다. SID는 오라클 데이터베이스 객체를 구별해주는 이름이다.
 
다음은 JDBC 테스트 파일 GetEmp.java 를 실행할 때 발생할 수 있는 에러와 그 해결방안이다.
- Exception in thread "main" java.lang.NoClassDefFoundError: GetEmp
		- GetEmp 클래스를 찾을 수 없다는 익셉션: GetEmp.class 파일이 있는 곳에서 실행했는지 확인
- 클래스패스에 .이 있는지 확인
 
- java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver
		- 오라클 JDBC 드라이버의 시작 클래스를 찾을 수 없다는 익셉션: 오라클 JDBC 드라이버가 CLASSPATH 에 맞게 추가했는지 확인
 
- java.sql.SQLException: IO 예외 상황: The Network Adapter could not establish the connection
		- 오라클의 리슨너(listener)가 서비스를 하고 있지 않을 가능성이 많다.
- 명령 프롬프트에서 lsnrctl status 로 리슨너의 서비스 상태를 확인
- 리슨너가 동작하고 있다면 서버의 IP 를 127.0.0.1 에서 loopback adapter 를 설치할 때 설정한 10.10.10.10 으로 바꾸고 시도해 본다
 
- java.sql.SQLException: ORA-01017: invalid username/password; logon denied
		- scott 계정의 비밀번호가 틀린 경우: 비밀번호가 tiger이 아니라면 GetEmp.java 소스를 수정한다.
 
javac 와 java 의 -classpath 옵션을 사용하여 테스트
컴파일과 실행시에 -classpath 옵션을 사용하여 테스트하는 방법을 소개한다.
C:\>javac -classpath C:/oraclexe/app/oracle/product/11.2.0/server/jdbc/lib/ojdbc6.jar GetEmp.java C:\>java -classpath .;C:/oraclexe/app/oracle/product/11.2.0/server/jdbc/lib/ojdbc6.jar GetEmp 7369 : SMITH : CLERK : 7902 : 1980-12-17 00:00:00.0 : 800 : null : 20 7499 : ALLEN : SALESMAN : 7698 : 1981-02-20 00:00:00.0 : 1600 : 300 : 30 7521 : WARD : SALESMAN : 7698 : 1981-02-22 00:00:00.0 : 1250 : 500 : 30 7566 : JONES : MANAGER : 7839 : 1981-04-02 00:00:00.0 : 2975 : null : 20 7654 : MARTIN : SALESMAN : 7698 : 1981-09-28 00:00:00.0 : 1250 : 1400 : 30 7698 : BLAKE : MANAGER : 7839 : 1981-05-01 00:00:00.0 : 2850 : null : 30 7782 : CLARK : MANAGER : 7839 : 1981-06-09 00:00:00.0 : 2450 : null : 10 7839 : KING : PRESIDENT : null : 1981-11-17 00:00:00.0 : 5000 : null : 10 7844 : TURNER : SALESMAN : 7698 : 1981-09-08 00:00:00.0 : 1500 : 0 : 30 7900 : JAMES : CLERK : 7698 : 1981-12-03 00:00:00.0 : 950 : null : 30 7902 : FORD : ANALYST : 7566 : 1981-12-03 00:00:00.0 : 3000 : null : 20 7934 : MILLER : CLERK : 7782 : 1982-01-23 00:00:00.0 : 1300 : null : 10 C:\>
GetEmp.class 파일에 있는 곳에 아래 내용으로 BAT 파일을 만들어 놓으면 테스트 파일로 이용할 수 있다.
JDBCTEST.bat
@echo off java -classpath .;C:/oraclexe/app/oracle/product/11.2.0/server/jdbc/lib/ojdbc6.jar GetEmp pause
이클립스에서 GetEmp.java 테스트하기
이클립스를 클래스패스 환경변수를 참조하지 않는다.
이클립스에서 프로젝트 단위로 코드를 관리하므로 일단 프로젝트를 만들어야 한다.
아래 그림은 jdbc라는 프로젝트를 만들고, net.java_school.jdbc라는 패키지에 속하도록 GetEmp.java 파일을 생성한 경우이다.
마우스로 프로젝트를 선택한다.
오른쪽 버튼을 클릭하여 아래와 같이 메뉴를 선택한다.
Libraries탭을 선택한 후 Add External JARs..버튼을 클릭하여 오라클 JDBC드라이버 파일을 추가한다.

오라클 JDBC 드라이버 파일을 찾아서 추가한다.


Package Explorer 뷰에서 GetEmp.java 를 마우스로 선택한 후 오른쪽 버튼을 클릭하여 아래처럼 실행한다.

