dポイントプレゼントキャンペーン実施中!

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")の命令だけを使ってなんの意味があるのでしょうか?

意味不明で困っています。どうか、よろしくお願い致します。

A 回答 (3件)

Driver の実装クラスは、


static 初期化子に、自身を DriverManager に
登録する、という処理が記述されています。

static 初期化子は、そのクラスが最初にロード
された時に実行されます。クラスがロードされるとは
そのクラスの Class オブジェクトが生成されることで
(厳密にはイコールではないですが)、
Class.forName は そのクラスの Class オブジェクトを、
クラスが未ロードならロードした上で返すメソッドです。
    • good
    • 0

他の回答者と同じ内容ですが、イメージが湧きにくいですよね。


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ドライバ・クラスの実装での決まりごとです。
    • good
    • 0

org.postgresql.Driverというクラスを初期化すると


java.sql.DriverManagerというクラスに自分を登録して
、DriverManager.getConnection()としたときに
postgresのコネクションがえられるようになります。
あとは、java.sql.DriverManagerのドキュメントを読むと参考になるかもしれません。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!