블로그 이미지
좋은느낌/원철
이것저것 필요한 것을 모아보렵니다.. 방문해 주셔서 감사합니다..

calendar

1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

Notice

    2009. 5. 21. 20:01 개발/Oracle

    리눅스 환경에서 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드라이버가 들어있다. 만약 없다면 아래 링크에서 버전별로 자신의 오라클에 맞는 드라이버를 다운받기 바란다.

    Oracle JDBC Download

    필자는 오라클 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가 제대로 설정이 되었나 테스트를 해보자.

    +Oracle JDBC 테스트 #1

    먼저 드라이버가 제대로 설정이 되었는지 테스트 해보자. 우선 아래와 같이 입력한다. 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를 확인하기 바란다.

    +Oracle JDBC 테스트 #3

    이제 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드라이버를 제대로 인식을 못하는 것이다.

    +Oracle 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)

    posted by 좋은느낌/원철