오라클 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:\ Command PromptC:\>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 를 마우스로 선택한 후 오른쪽 버튼을 클릭하여 아래처럼 실행한다.