복붙노트

[SQL] Class.forName을 (JDBC_DRIVER)는 더 이상 필요하지?

SQL

Class.forName을 (JDBC_DRIVER)는 더 이상 필요하지?

나는 자바 6 있기 때문에 더 이상 필요가 사용하는 JDBC 드라이버를 등록하지 할 수 있도록 여기에 읽었습니다 :

Class.forName(JDBC_DRIVER);

DriverManager의 시스템 속성 "에 jdc.drivers"에있는 경로를 사용하기 때문에 올바른 드라이버를 검색 할 수 있습니다.

하지만 다음 작업을 수행 할 때 :

System.out.print(System.getProperty("jdbc.drivers"));

null가 인쇄됩니다.

내 응용 프로그램이 제대로 작동 왜 어떤 단서를 가지고 있습니까? ;)

해결법

  1. ==============================

    1.즉 해당 시스템 속성과는 아무 상관이 없습니다. Java6 (및 JDBC4)는 공지 된 인터페이스의 구현은 시작시 JVM에 의해 검출 될 수있는 "서비스 제공자"이라고하는 개념을 소개했다. 그와 호환되는 드라이버가 자동으로 DriverManager에 등록됩니다. 즉 Class.forName을 ()가 더 이상 필요한 이유 없다 -하지만 경우에만 드라이버가 지원하는.

    즉 해당 시스템 속성과는 아무 상관이 없습니다. Java6 (및 JDBC4)는 공지 된 인터페이스의 구현은 시작시 JVM에 의해 검출 될 수있는 "서비스 제공자"이라고하는 개념을 소개했다. 그와 호환되는 드라이버가 자동으로 DriverManager에 등록됩니다. 즉 Class.forName을 ()가 더 이상 필요한 이유 없다 -하지만 경우에만 드라이버가 지원하는.

    메타-INF 디렉토리 안에있는 드라이버의 jar 파일에 서비스 디렉토리가있는 경우 서비스 등록이 시작됩니다. 이 디렉토리는 구현 클래스를 포함 java.sql.Driver하는 JDBC 드라이버의 경우 구현 된 인터페이스의 이름을 가진 텍스트 파일을 포함 할 필요가있다.

  2. ==============================

    2.DriverManager에의 Javadoc과에서 :

    DriverManager에의 Javadoc과에서 :

    (가 DriverManager를가하려고합니다 말한대로) 시스템 속성이 지정 될 필요가 없다는 것을이 의미합니다. 자바 6 이후 서비스 로딩에 의존 드라이버가 자동으로로드되는 또 다른 메커니즘이있다 :

    거의 모든 JDBC 드라이버는 지금이 요구 사항을 준수합니다. 아직도 널 (null) 그래서 DriverManager에 내부적의에 jdc.drivers 속성을 기입하지 않습니다.

  3. from https://stackoverflow.com/questions/28220724/class-fornamejdbc-driver-no-longer-needed by cc-by-sa and MIT license