본문 바로가기

StoreHouse/Java

Jdbc 를 load 하는 3가지 방법

설명을 위해 jdbc driver는 mm-mysql jdbc driver를 사용하겠습니다.
전체 클래스명은 org.gjt.mm.mysql.Driver 입니다.

1번째 방법

Driver d = new org.gjt.mm.mysql.Driver();

보통 java.sql.Driver 인터페이스를 구현할때는 class의 static 블럭부분에
실제로 DriverManager 에게 register하는 코드가 적혀있습니다. 그러므로
위와 같은 코드는 별로 이롭지 않습니다.
실제로 application programmer는 jdbc driver instance를 가질 필요가
거의 없기 때문이겠지요.

그리고 또 하나의 문제점은 source code내에 특정 vendor의 jdbc driver class
name이 박혀버린다는데 있습니다.

그러므로 1번째 방법은 가능하긴 하지만, 추천하지 않는 방법입니다.

2번째 방법

Class.forName("org.gjt.mm.mysql.Driver");

이 방법은 대부분의 프로그래머가 사용하는 방법입니다.
위에서 말했듯이, 보통 DriverManager에게 register하는 부분은 class static
block에서 이루어지므로, 그런면에서 좀 더 적합하다고 볼 수 있습니다.
비록 Class 가 리턴되긴 하지만, Object가 리턴되지는 않기 때문입니다.

1번째 방법보다 한가지 더 좋아진 점은 특정 vendor의 driver명이 소스코드에
byte 수준으로 박히지 않았다는 곳에 있습니다.
String 형태의 fully qualified 이름을 사용하기 때문에, 클래스명을
외부(configuration file, ldap, etc.)에서 동적으로 읽어오게 할 수 있으므로,
매우 유연한 접근을 할 수 있습니다.

3번째 방법

3번째 방법은 source code를 조금도 건드릴 필요가 없는 방법입니다.
보통 2번째 방법을 많이 쓰고, 1번째 방법도 그런게 있구나- 하고 알고 계시는
분들은 많은것 같지만 3번째 방법은 아시는 분들이 많지 않은것 같습니다.

JVM 시작 시, property 로 주는 방법입니다.

java -Djdbc.drivers=org.gjt.mm.mysql.Driver ...

단순히 jdbc.drivers property를 사용하는 방법입니다.
벌써 눈치채신 분도 있겠지만, jdbc.driver가 아니라 jdbc.drivers입니다.
만약 여러개의 jdbc driver를 사용할 경우에는 platform에 관계없이
콜론(으로 구분해주시면 됩니다.

java -Djdbc.drivers=org.gjt.mm.mysql.Driver:com.oracle.driver.OracleDriver ..

끝.