java

[알림판목록 I] [알림판목록 II] [글목록][이 전][다 음]
[ java ] in KIDS
글 쓴 이(By): hell (나누구야)
날 짜 (Date): 1997년12월28일(일) 09시36분06초 ROK
제 목(Title): [JDBC] Getting Started 한글판 (3-1)



3. DriverManager


3.1 개요

DriverManager 클래스는 사용자와 드라이버 중간에서 동작하는 JDBC의 관리층이다.
이것은 이용가능한 드라이버를 기억하고 데이터베이스와 적당한 드라이버사이에 
연결을
처리한다. 또한 드라이버 로그인 시간제한, 로그 프린팅, 메시지 트래이싱과 같은 
것들을
수행한다. 

간단한 어플리케이션을 작성할때에 프로그래머가 직접 사용할 필요가 있는 이 
클래스내에
있는 유일한 메쏘드는 DriverManager.getConnection이다. 이름이 의미하는 것처럼, 

메쏘드는 데이터베이스에 연결을 담당한다. JDBC는 사용자가 Driver 클래스의 
connect
메쏘드는 물론 DriverManager 클래스의 getDriver, getDrivers, registerDriver 
메쏘드를
호출할 수 있게해준다. 그러나 대부분의 경우에서는 DriverManager 클래스가 연결의
세부적인 것들을 관리하게 하는 것이 더 좋다. 

3.1.1 이용가능한 드라이버들을 기억하기 

DriverManager클래스는 DriverManager.registerDriver 메쏘드를 호출함으로 자체에
등록되어진 Driver 클래스들의 리스트를 보존한다. 모든 Driver 클래스들은 
클래스의
인스턴스를 생성하는 정적인 부분을 작성하고 그런다음 그것이 로드될 때
DriverManager클래스에 등록된다. 그러므로 사용자는 보통
DriverManager.registerDriver를 직접 호출하지 않으며, 로드되어질 때 드라이버에 
의해
자동적으로 호출되어진다. Driver 클래스는 로드되어지고, 그 결과 자동적으로
DriverManager에 의해서 두가지 방법으로 등록된다.: 

      1.Class.forName 메쏘드를 호출함. 이것은 분명히 드라이버 클래스를 
로드한다.
          어떠한 외부 설정에 의존하지 않기 때문에 드라이버를 로딩하는 이러한 
방법을
          추천한다. 아래 코드는 connect.microsoft.MicrosoftDriver 클래스를 
로드한다. : 

                   Class.forName("connect.microsoft.MicrosoftDriver"); 

          만약 connect.microsoft.MicrosoftDriver가 그것을 로딩하는 것이 
인스턴스가
          생성되게 하고 또한 매개변수로써 그 인스턴스를 가지는
          DriverManager.registerDriver를 호출하기 위해서 작성되어 있다면, 
그것은
          DriverManager의 드라이버 리스트에 있고 연결을 만들기 위해 이용할 수 
있다. 

      2.java.lang.System의 jdbc.drivers 속성에 드라이버를 추가함. 이것은
          DriverManager 클래스가 로드할 드라이버 클래스이름의 리스트이며, 
콜론으로
          구분된다. DriverManager 클래스를 초기화 할때, jdbc.drivers 시스템 
프로퍼티를
          찾고, 만약 사용자가 하나이상의 드라이버를 등록했다면 DriverManager 
클래스는
          그것들을 로드할 것이다. 다음의 코드는 어떻게 프로그래머가
          ~/.hotjava/properties에 세 개의 드라이버 클래스들을 등록하는지를 
보여준다.
          (HotJava는 시작할 때 이러한 것을 시스템 프로퍼티들로 로드한다.) 

                   
jdbc.drivers=foo.bah.Driver:wombat.sql.Driver:bad.test.ourDriver; 


DriverManager 메쏘드를 처음으로 호출하면 자동적으로 이러한 드라이버 클래스들이
로드된다. 

드라이버들을 로드하는 이러한 두 번째 방법은 영구적인 사전설정 환경을 
필요로한다. 만약
이러한 경우에 대해서 의심이 간다면, 각 드라이버를 명백하게 로드하기 위해
Class.forName 메쏘드를 호출하는 것이 안전하다. 또한 일단 DriverManager 
클래스가
초기화되면 결코 jdbc.drivers 속성 리스트를 다시 검사하지 않기 때문에, 특정 
드라이버를
가져오는데 이 메쏘드를 사용한다. 

위에서 나열된 두가지 방법들에서, DriverManager.registerDriver를 호출하여 
등록시키는
것은 새로이 로드된 Driver 클래스들의 책임이다. 위에서 언급한 것처럼, 이것은 
클래스가
로드될 때 자동적으로 이루어진다. 

보안 때문에 JDBC 관리층은 어떠한 로더가 어떠한 드라이버를 제공하는지를 
기억한다.
그러다음 DriverManager 클래스가 접속을 오픈할 때, 연결 요청을 발생시키는 
코드로써
로컬 파일 시스템이나 동일한 클래스 로더로부터 발생하는 드라이버만을 사용할 수 
있다. 

3.1.2 연결하기 

일단 Driver 클래스들이 로드되고 DriverManager 클래스에 등록되어졌다면, 
이것들은
데이터베이스에 연결하는데 이용가능하다. DriverManager.getConnection 메쏘드의
호출로 연결 요청이 만들어 졌을 때, DriverManager는 연결할 수 있는지를 보기 
위해서
교대로 각 드라이버들을 검사한다. 

때때로 주어진 URL에 접속할 수 있는 JDBC 드라이버가 하나 이상일 경우도 있을 
것이다.
예를 들면, 주어진 리모트 데이터베이스에 접속할 때, JDBC-ODBC 드라이버,
JDBC-to-generic-network-protocol 드라이버나 또는 데이터베이스 번더에 의해 
공급된
드라이버를 사용할 수 있을 것이다. 그러한 경우에, DriverManager는 주어진 URL에
성공적으로 연결할 수 있는 발견된 첫 번째 드라이버를 사용하기 때문에 
드라이버들이
검사되는 순서는 중요하다. 

먼저 DriverManager는 드라이버들이 등록되어진 순서로 각각을 사용하려고 한다.
(jdbc.drivers에 나열된 드라이버들은 항상 먼저 등록되어진다.) 만약 연결을 
오픈하려는
코드와 같은 소스로부터 로드되어지지 않았다면, 신뢰되지 않은 코드인 어떠한 
드라이버도
무시될 것이다. 

사용자가 DriverManager.getConnection 메쏘드의 매개변수로 전달한 URL을 
사용하여,
차례대로 각각에 대해서 Driver.connect 메쏘드를 호출함으로 드라이버들을 
검사한다.
URL을 인가한 첫 번째 드라이버가 연결을 한다. 

이러한 과정이 비능률적인 것 처럼 보일지 모르지만 수십개의 드라이버들이 
동시적으로
로드되는 경우는 드물기때문에 연결당 소수의 프로시져 호출과 스트링 비교만을
필요로하다. 

다음 코드는 JDBC-ODBC 브리지 드라이버와 같은 보통 드라이버를 가지고 연결하는
예제이다. 

        Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); // 드라이버를 
로드한다. 
        String url = "jdbc:odbc:fred"; 
        Connection con = DriverManager.getConnection(url, "userID", 
"passwd"); 
 
~~moom~~ ~~moom~~ ~~moom~~ ~~moom~~ ~~moom~~ ~~moom~~ ~~moom~~ ~~moom~~ ~~moom~
KAIST전기및전자공학과학부96김태홍 URL :: http://volt.kaist.ac.kr/~dodo
dodo@ohm dodo@csqueen dodo96@nownuri hell@kids nextism@ara 
~~moom~~ ~~moom~~ ~~moom~~ ~~moom~~ ~~moom~~ ~~moom~~ ~~moom~~ ~~moom~~ ~~moom~
[알림판목록 I] [알림판목록 II] [글 목록][이 전][다 음]
키 즈 는 열 린 사 람 들 의 모 임 입 니 다.