JDBC 仕様、第 9 章、セクション 2からの引用:
JDBC ドライバーは Driver インターフェースを実装する必要があり、その実装には、ドライバーのロード時に呼び出される静的初期化子が含まれている必要があります。この初期化子は、それ自体の新しいインスタンスを DriverManager に登録します。
また、サンプル コードは次のように提供さAcmeJdbcDriver
れます。
public class AcmeJdbcDriver implements java.sql.Driver {
static {
java.sql.DriverManager.registerDriver(newAcmeJdbcDriver());
}
}
また、API ドキュメントによると、Class.forName(String className)を呼び出すと、次のことが起こります。
forName("X") を呼び出すと、X という名前のクラスが初期化されます。
初期化には、実行される静的ブロック内のコードが含まれます。
基本的に、Driver クラスを初期化すると、クラスjava.sql.DriverManager
は JDBC 仕様に従って自身を登録します。
これはもう必要ありません。詳細はこちらをご覧ください。
DriverManager メソッド getConnection および getDrivers が拡張され、Java Standard Edition Service Provider メカニズムがサポートされるようになりました。JDBC 4.0 ドライバーには、ファイル META-INF/services/java.sql.Driver が含まれている必要があります。このファイルには、java.sql.Driver の JDBC ドライバー実装の名前が含まれています。たとえば、my.sql.Driver クラスをロードするには、META-INF/services/java.sql.Driver ファイルに次のエントリを含めます。
my.sql.Driver
アプリケーションは、Class.forName() を使用して JDBC ドライバーを明示的にロードする必要がなくなりました。