JDBCドライバーをロードして登録するためのforName
メソッドとregisterDriver
との違いはどれですか?
Class.forName()
はJDBCとは直接関係していません。クラスをロードするだけです。
ほとんどのJDBCドライバークラスは、 registerDriver()
を呼び出して、静的イニシャライザーに登録します。
registerDriver()
は、自分で呼び出す必要がほとんどない実際の呼び出しです(独自のJDBCドライバーを作成しない限り)。
JDBC 4では、JDBCドライバーが最新の場合、サービスの場所を使用してドライバーを見つけることができるため、これらのいずれも必要がないことに注意してください代わりにメカニズム(つまり、その呼び出しを省略して、通常どおり接続を開きます)。詳細については、 DriverManager
のドキュメント を参照してください。
DriverManagerのメソッド
getConnection
およびgetDrivers
は、Java Standard Edition Service Providerメカニズムをサポートするように拡張されています。JDBC4.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ドライバーを明示的にロードする必要がなくなりました。現在Class.forName()
を使用してJDBCドライバーをロードする既存のプログラムは、変更なしで引き続き動作します。
DriverManager.registerDriver()
メソッドを手動で呼び出さないでください。 JDBC仕様では、クラスがロードされるときにドライバーが自身を登録する必要があり、クラスはClass.forName()
を介してロードされます。 JDBC 4では、クラスパス上にあるだけで、ドライバーを自動的にロードできます。
DriverManager.registerDriver()
は、ドライバーを実際に2回登録するため、手動で危険な可能性があります。コードでメモリリークを防ぐためにドライバの登録を解除する必要がある場合は、一度登録を解除して、2番目のインスタンスを登録したままにしてください。