JDBC 드라이버로드

자바 탑

방금 Spring 5 및 Spring Boot 2의 기본 사항에 초점을 맞춘 새로운 Learn Spring 과정을 발표했습니다 .

>> 과정 확인

1. 소개

JDBC는 Java Database Connectivity 계약의 API 및 SPI 부분을 정의하는 일련의 사양입니다. 이 표준은 JDBC 드라이버 추상화를 데이터베이스와 상호 작용하는 기본 진입 점으로 정의합니다.

이 튜토리얼에서는 JDBC 드라이버를로드하는 데 필요한 몇 가지 기본 단계를 살펴 보겠습니다.

2. JDBC 드라이버

데이터베이스에 연결하려면 JDBC 드라이버의 인스턴스를 가져와야합니다.

JDBC URL 연결 문자열을 지정하여 DriverManager 를 통해 가져올 수 있습니다 . 이러한 URL에는 데이터베이스 엔진 유형, 데이터베이스 이름, 호스트 이름 및 포트뿐만 아니라 데이터베이스 공급 업체에 특정한 기타 연결 매개 변수가 포함됩니다.

연결 문자열을 사용하여 JDBC에서 데이터베이스와의 기본 통신 단위 인 데이터베이스 연결 개체를 얻을 수 있습니다 .

Connection con = DriverManager.getConnection( "jdbc:postgresql://localhost:21500/test?user=fred&password=secret&ssl=true"); 

유일한 표시가 지정된 URL 인 경우 드라이버 관리자는 사용할 드라이버를 어떻게 알 수 있습니까?

클래스 경로에 많은 JDBC 드라이버가있을 수 있으므로 각 드라이버를 고유하게 구별하는 방법이 있어야합니다.

3. 레거시 접근 방식

JDBC 버전 4 및 Java SE 1.6 이전에는 서비스를 자동으로 검색하고 등록 할 수있는 일반적인 메커니즘이 JVM에 없었습니다. 따라서 JDBC 드라이버 클래스를 이름으로로드하려면 수동 단계가 필요했습니다.

Class.forName("oracle.jdbc.driver.OracleDriver");

클래스 로딩 프로세스는 드라이버 인스턴스를 DriverManager에 등록 하고이 클래스를 oracle 또는 postgres 같은 데이터베이스 엔진 식별자와 연결 하는 정적 초기화 루틴을 트리거합니다 .

등록이 완료되면 JDBC URL 내에서이 식별자를 jdbc : oracle 로 사용할 수 있습니다 .

일반적인 드라이버 등록 루틴은 드라이버 인스턴스를 인스턴스화하고 DriverManager.registerDriver 메서드 로 전달합니다 .

public static void register() throws SQLException { if (isRegistered()) { throw new IllegalStateException("Driver is already registered. It can only be registered once."); } else { Driver registeredDriver = new Driver(); DriverManager.registerDriver(registeredDriver); Driver.registeredDriver = registeredDriver; } }

위의 예는 DriverManager를 사용한 Postgres JDBC 드라이버 등록을 보여줍니다 . 정적 이니셜 라이저의 일부로 JVM에 의해 트리거됩니다.

jdbc.drivers 시스템 속성 을 설정하여 레거시 접근 방식 으로도이 단계를 부분적으로 자동화 할 수 있습니다.

java -Djdbc.drivers=oracle.jdbc.driver.OracleDriver

이 등록 정보를 지정하면 드라이버 관리자가 지정된 JDBC 드라이버를 자동으로로드하려고합니다.

4. JDBC 4 접근법

의 문제 자동 서비스 발견은 자바 1.6과 서비스 제공 메커니즘으로 해결되었다 . 이를 통해 서비스 공급자는 서비스가 포함 된 JAR 파일 내의 META-INF / services 아래에 서비스를 배치하여 서비스를 선언 할 수 있습니다.

이 메커니즘은 드라이버를 자동으로 등록하므로 클래스를로드하는 수동 단계가 더 이상 필요하지 않습니다. 그러나 서비스 공급자가있는 경우에도 수동 클래스로드로 인해 오류가 발생하지 않습니다. 최신 JVM 및 JDBC 4 드라이버를 사용하여 명시 적으로 드라이버로드를 호출하는 것은 완벽하게 합법적입니다.

서비스 공급자 사양은 단순히 수동 클래스로드를 선언적 접근 방식으로 대체합니다. 예를 들어 PostgreSQL JDBC 드라이버에는 META-INF / services / 아래에 단일 파일이 있습니다. 파일 이름은 java.sql.Driver (JDBC 드라이버에 대해 잘 정립 된 규칙)입니다. 여기에는 JDBC 드라이버의 완전한 클래스 이름 (이 경우 org.postgresql.Driver )이 포함 됩니다.

5. 결론

이 기사에서는 각 접근 방식에 대한 설명과 함께 JDBC 드라이버를로드하는 다양한 방법뿐만 아니라 JDBC에 대한 기본 개념을 검토했습니다.

평소처럼 기사의 전체 소스 코드는 GitHub에서 사용할 수 있습니다.

자바 바닥

방금 Spring 5 및 Spring Boot 2의 기본 사항에 초점을 맞춘 새로운 Learn Spring 과정을 발표했습니다 .

>> 과정 확인