- ベストアンサー
Class.forName("org.postgresql.Driver")の意味
JDBCを使って、PostgreSQL を利用する場合、 まず最初に、Class.forName("org.postgresql.Driver")というのを使いますよね。 この、Class.forName(String str)メソッドは、str にある、クラスを初期化すると仕様書には書いてます。 (Class.forName("org.postgresql.Driver")).newInstance() を実行して、org.postgresql.Driver.class のコンストラクタを実行するというのなら、意味はわかるのですが、、、 ただClass.forName("org.postgresql.Driver")の命令だけを使ってなんの意味があるのでしょうか? 意味不明で困っています。どうか、よろしくお願い致します。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
Driver の実装クラスは、 static 初期化子に、自身を DriverManager に 登録する、という処理が記述されています。 static 初期化子は、そのクラスが最初にロード された時に実行されます。クラスがロードされるとは そのクラスの Class オブジェクトが生成されることで (厳密にはイコールではないですが)、 Class.forName は そのクラスの Class オブジェクトを、 クラスが未ロードならロードした上で返すメソッドです。
その他の回答 (2)
- iwashimizu
- ベストアンサー率30% (17/55)
他の回答者と同じ内容ですが、イメージが湧きにくいですよね。 org.postgresql.DriverのようなJDBCドライバのソースには 以下のようなコードがあるのだと思ってください。 public class FooDriver implements Driver { static { FooDriver driver = new FooDriver(); DriverManager.registerDriver(driver); } .... } Class.forName("FooDriver");のようにするとJVMがFooDriverを ロードしますが、その際にstatic {}の部分を実行します。 FooDriverのインスタンスを生成して、DriverManagerに登録して いますよね。static初期化子でこのような処理を行うことは JDBCドライバ・クラスの実装での決まりごとです。
- qazwsxe
- ベストアンサー率20% (2/10)
org.postgresql.Driverというクラスを初期化すると java.sql.DriverManagerというクラスに自分を登録して 、DriverManager.getConnection()としたときに postgresのコネクションがえられるようになります。 あとは、java.sql.DriverManagerのドキュメントを読むと参考になるかもしれません。