리눅스 환경에서 Oracle JDBC설정
글쓴이: 굿스피드 (2003년 09월 04일 오전 11:44) 읽은수: 495
JDBC는 자바에서 SQL문을 실행하기 위한 자바 API이다. "Java DataBase Connectivity"의 약자로 간주되기도 하지만 사실상은 상표이름이다. JDBC는 자바로 작성되어진 클래스와 인터페이스들로 구성되어있다. 툴/데이터베이스 개발자들을 위한 표준 API를 제공하고 pure 자바 API를 사용하여 데이터베이스 어플리케이션을 만들게 해준다.
JDBC를 사용하면, 어떠한 관계 데이터베이스(relational database)로도 SQL문을 전송하기 쉽다. 즉, JDBC API를 사용하면 Sybase, Oracle, Informix에 접근하는 프로그램을 따로 만들 필요가 없다. 단지 하나의 프로그램을 작성하고 그 프로그램에서 SQL 문을 적당한 데이터베이스에 전송할 수 있다. 또한 어플리케이션을 자바로 작성한다면, 어플리케이션을 플랫폼에 따라 다르게 작성하지 않아도 되기 때문에 자바와 JDBC의 결합은 하나의 프로그램이 어디에서나 동작할 수 있게 해준다.
|
리눅스 환경에서 oracle jdbc를 구동하기 위해서는 먼저 oracle jdbc드라이버가 있어야 된다. 오라클 설치시 기본 권정사항으로 설치했다면 이미 jdbc드라이버가 들어있다. 만약 없다면 아래 링크에서 버전별로 자신의 오라클에 맞는 드라이버를 다운받기 바란다.
필자는 오라클 8.1.7을 설치했다. 기본 권장 사항 설치를 했을 경우 JDBC드라이버가 지원이 되었었다. 기본 권장 사항 설치시 jdbc드라이버의 경로는 $ORACLE_HOME/product/8.1.7/jdbc/lib이다.
lib폴더 아래 보면 classes111.zip(9i는 classes12.zip)화일이 있을것이다. jdbc드라이버가 있는것이 확인됐다면 이제 드라이버 환경 설정을 해보자
[root@localhost]# |
[root@localhost]# unzip classes111.zip [root@localhost]# ls javax oracle |
먼저 classes111.zip의 압축을 풀어보면 javax와 oracle폴더가 보일것이다. 이것일 jar로 압축해서 사용을 할 것이다.
[root@localhost]# |
[root@localhost]# jar cvf classes111.jar javax/ oracle/ |
위와 같이 jar로 압축을 하면 classes111.jar화일이 생성이 된다. 이제 CLASSPATH설정을 해보자.
[root@localhost]# |
[root@localhost]# vi /etc/profile export CLASSPATH="$CLASSPATH:/oracle/product/8.1.7/jdbc/lib/classes111.jar" [root@localhost]# set | grep CLASSPATH CLASSPATH=.:/usr/local/JSDK/lib/jsdk.tar:/usr/local/tomcat/common/lib/servlet.jar: /oracle/product/8.1.7/jdbc/lib/classes111.jar |
위와 같이 classes111.jar이 나와야 정상이다. 일단 oracle jdbc가 제대로 설정이 되었나 테스트를 해보자.
|
먼저 드라이버가 제대로 설정이 되었는지 테스트 해보자. 우선 아래와 같이 입력한다. JAVA에서 오라클 드라이버의 로딩을 확인해 볼 수 있다.
[root@localhost]# |
[root@localhost]# javap oracle.jdbc.driver.OracleDriver Compiled from OracleDriver.java public class oracle.jdbc.driver.OracleDriver extends java.lang.Object implements java.sql.Driver /* ACC_SUPER bit NOT set */ { public static final char slash_character; public static final char at_sign_character; static final java.lang.String oracle_string; static final java.lang.String user_string; static final java.lang.String password_string; static final java.lang.String database_string; static final java.lang.String server_string; static final java.lang.String access_string; public static final java.lang.String protocol_string; public static final java.lang.String dll_string; --------------중간 생략----------------------- public int getMajorVersion(); public int getMinorVersion(); public boolean jdbcCompliant(); public static java.lang.String getCompileTime(); public oracle.jdbc.driver.OracleDriver(); static {}; } |
만약 위와 같이 안나온다면 CLASSPATH설정을 확인해 보기 바란다. 설정이 제대로 안되있다면 아래와 같이 에러가 나올 것이다.
[root@localhost]# |
[root@localhost]# javap oracle.jdbc.driver.OracleDriver Class 'oracle.jdbc.driver.OracleDriver' not found |
이제 실제로 java와 jsp테스트를 해보자. 소스가 좀 길다. 하지만 정확한 테스트가 가능하니 꼭 테스트 해보기 바란다.
[root@localhost]# |
import java.sql.*; public class Jdbctest { public static void main (String args[]) { try { /* This produces more output then suitible for this article */ /* Uncomment the next line for more connect information */ // DriverManager.setLogStream(System.out); /* * Set the host port and sid below to * match the entries in the listener.ora * Must have a SCOTT/TIGER schema */ String host = "127.0.0.1"; // change,these won\'t work String port = "1521"; String sid = "oracle"; // or pass on command line all three items if ( args.length >= 3 ) { host = args[0]; port = args[1]; sid = args[2]; } String s1 = "jdbc:oracle:thin:@" + host + ":" + port + ":" + sid ; if ( args.length == 1 ) { s1 = "jdbc:oracle:oci8:@" + args[0]; } if ( args.length == 4 ) { s1 = "jdbc:oracle:" + args[3] + ":@" + "(description=(address=(host=" + host+ ")(protocol=tcp)(port=" + port+ "))(connect_data=(sid=" + sid + ")))"; } System.out.println( "Connecting with: " ); System.out.println( s1 ); DriverManager.registerDriver( new oracle.jdbc.driver.OracleDriver()); Connection conn = DriverManager.getConnection( s1, "scott", "tiger"); DatabaseMetaData dmd = conn.getMetaData(); System.out.println("DriverVersion: ["+ dmd.getDriverVersion()+"]"); System.out.println("DriverMajorVersion: ["+ dmd.getDriverMajorVersion()+"]"); System.out.println("DriverMinorVersion: ["+ dmd.getDriverMinorVersion()+"]"); System.out.println("DriverName: ["+ dmd.getDriverName()+"]"); if ( conn!=null ) conn.close(); System.out.println("Done."); } catch ( SQLException e ) { System.out.println ("\\n*** Java Stack Trace ***\\n"); e.printStackTrace(); System.out.println ("\\n*** SQLException caught ***\\n"); while ( e != null ) { System.out.println ("SQLState: " + e.getSQLState ()); System.out.println ("Message: " + e.getMessage ()); System.out.println ("Error Code: " + e.getErrorCode ()); e = e.getNextException (); System.out.println (""); } } } } |
테스트는 접속 방식은 thin과 oci8의 두가지로 테스트를 해본다. 127.0.0.1에는 오라클 리스너에 등록되어있는 포트를 넣어주고 1521은 오라클 기본포트이다. ORCL은 오라클 SID이다. 자신에게 맞는것을 넣어주면 된다.
[root@localhost]# |
[root@localhost]# javac Jdbctest.java [root@localhost]# java Jdbctest 127.0.0.1 1521 ORCL thin(or oci8) Connecting with: jdbc:oracle:thin:@(description=(address=(host=127.0.0.1)(protocol=tcp) (port=1521))(connect_data=(sid=oracle))) DriverVersion: [8.1.7.1.0] DriverMajorVersion: [8] DriverMinorVersion: [1] DriverName: [Oracle JDBC driver] Done. |
위와 같이 나오면 연결에 성공한 것이다. 만약 안된다면 CLASSPATH를 확인하기 바란다.
|
이제 jsp환경에서 테스트를 해보자 필자의 jsp환경은 jakarta-tomcat-4.1.18과 apache_1.3.27을 mod_jk로 연동시켰다.
[root@localhost]# |
[root@localhost]# vi oracle.jsp <%@ page language="java" import="java.sql.*" contentType="text/html;charset=KSC5601" %> <% Class.forName("oracle.jdbc.driver.OracleDriver"); Connection Conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:SID","scott","tiger"); Statement stmt = Conn.createStatement(); ResultSet rs = stmt.executeQuery("select * from tab"); if (rs==null) { out.println("none"); } else { out.println("oracle jdbc 연결 성공"); } stmt.close(); Conn.close(); %> |
위와 같이 저장하고 웹브라우저로 확인해 보자. 만약 에러가 난다면 tomcat4가 jdbc드라이버를 제대로 인식을 못하는 것이다.
|
tomcat 4버전부터 연동하는데 조금 어려움이 있다. 정상적으로 CLASSPATH도 잡혀있고 java와의 연동도 되지만 jsp와의 연동이 잘 안될때가 많았다. 이럴때는 다음과 같이 링크를 걸어주기 바란다.
[root@localhost]# |
[root@localhost]# ln -s /oracle/product/8.1.7/jdbc/lib/classes111.jar \ /usr/local/tomcat/common/lib/classes111.jar |
이렇게 링크를 걸어주면 tomcat환경에서 jdbc의 연동이 가능할것이다. 마지막으로 oracle과 tomcat + apache와의 연동에서 jdbc연동이 안된다면 apachectl시작 스크립트에 oracle환경 설정이 등록되어있나 확인해 보기 바란다. 물론 리스너쪽 설정도 이상이 없어야 한다.
오라클 환경 설정은 ORACLE_HOME과 ORACLE_SID만 설정되어 있으면 된다.
재 등록일 : 2003년 09월 06일 오후 09:29
원문 : 나소드(http://www.nasord.com/stories.php?story=03/09/04/3444708)