- - PR -
Class.forName("foo")とDriverManager.getConnection("bar")の間には?
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2004-10-15 15:26
JDBCのおなじみのフレーズですが、Class.forName("foo")で登録したドライバは
どうやってDriverManager.getConnection("bar")で使われているのか、ソース 上からは関連が見えないじゃないかと質問されて、自分もよく分かってないこと に気が付きました。 Webで自分なりに調べてみて、 1)Class.forName("foo")でロードされる。 2)(どこか&なにか)で"foo"がnewされて DriverManager.deregisterDriver()に投げられる。 3)DriverManagerのクラスメンバ(?)に格納される。 4)DriverManager.getConnection()では2)で格納されたdriverを使う。 の様な感じなのかと思ったのですが、理解は正しい方向へ向かっているでしょうか。 「この本orサイトを読むと分かるよ」みたいな情報でもいただけたらうれしいです。 | ||||
|
投稿日時: 2004-10-15 15:50
ドライバのstaticイニシャライザでDriverManager.registerDriver(Driver)を呼んでるんじゃないですかね。 | ||||
|
投稿日時: 2004-10-15 15:54
1)Class.forName("foo")でfooクラスがロードされる。
2)fooクラスの静的初期化子でDriverManager.registerDriver()を実行し、自分自身を登録する。 3)DriverManagerのクラスメンバに格納される。 4)DriverManager.getConnection()では格納されたdriverクラスを使って片っ端から接続を試みる。
標準ライブラリやドライバクラスのソースを見るのがいいと思います。 | ||||
|
投稿日時: 2004-10-15 16:53
こんにちは。
お恥ずかしながら「static initializer」を知りませんでした。 コンストラクタじゃnewするときだから違うよなーなどと思ってました。 つい最近に話題に上がってますね。 http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=15319&forum=12&3 どうもありがとうございました。 |
1