2011-09-15 15 views

答えて

2

Class.forName()は、呼び出し時にクラスを初期化することが保証されています。あなたはそれをどうやって提案しますか? com.foo.Driver d;のように、ローカル変数を代入せずに宣言できますか?代わりにメンバー変数にするのはどうですか?あなたは実際にそれを割り当てなければなりませんか?どのようにしてクラスをロードする必要があるのか​​について仕様は何を言いますか?あなたは本当にそれについて考える必要がありますか、またはClass.forName()に電話するだけですか?

これに関連して、多くのJDBCドライバでこれを行う必要はなくなりました。 DriverManager now uses the ServiceLoader mechanismは、適合するドライバクラスを識別し、ロードする。

0

リフレクション以外のJDBCドライバを読み込む技術を使用することは実用的ではありません。 (これにはさまざまな方法がありますが)。 JDBCドライバはたくさんあり、アプリケーションで実装コードが利用できない場合があります。

1

JDBCの考え方全体は、特定のドライバや実装に依存しないことです。この考え方は、JDBCを使用し、実行時に利用可能なドライバを設定できるということです。これを行うには、ドライバを名前でロードし、JDBCメソッドを使用する必要があります。残念ながら、JDBCはエラーコードのようなデータベース間のすべての相違点を抽象化しておらず、テストしていないデータベースに切り替えることは良い考えではないかもしれません。

すべてのライブラリについて、コンパイル時に利用可能であり、アプリケーションの再テストや再デプロイメントを行わなくても、wim上でデータベースを変更することはできません。この場合、特定のドライバ(Class.forNameを使用する代わりに)にリンクすることは、あなたや他の誰かが変更をより深く考えて、テスト手順に従うようになるため、良いことかもしれません。