
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")の命令だけを使ってなんの意味があるのでしょうか?
意味不明で困っています。どうか、よろしくお願い致します。
No.2ベストアンサー
- 回答日時:
Driver の実装クラスは、
static 初期化子に、自身を DriverManager に
登録する、という処理が記述されています。
static 初期化子は、そのクラスが最初にロード
された時に実行されます。クラスがロードされるとは
そのクラスの Class オブジェクトが生成されることで
(厳密にはイコールではないですが)、
Class.forName は そのクラスの Class オブジェクトを、
クラスが未ロードならロードした上で返すメソッドです。
No.3
- 回答日時:
他の回答者と同じ内容ですが、イメージが湧きにくいですよね。
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ドライバ・クラスの実装での決まりごとです。

No.1
- 回答日時:
org.postgresql.Driverというクラスを初期化すると
java.sql.DriverManagerというクラスに自分を登録して
、DriverManager.getConnection()としたときに
postgresのコネクションがえられるようになります。
あとは、java.sql.DriverManagerのドキュメントを読むと参考になるかもしれません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) seleniumbasic chrome操作について 1 2023/03/29 15:40
- Java java final 1 2022/06/10 22:49
- PHP アップロード画像数でCSSを分けることに成功したのですが、画像の横に文字を並べることが出来ません。 3 2023/07/28 17:16
- JavaScript html5に変えるとスライドショーが消えてしまった。 3 2022/03/26 19:53
- Java JavaのSingletonパターンのprivateの持つ意味が分かりません。 5 2022/06/12 10:38
- PostgreSQL SQLでUPSERTを一度に複数行やる方法 3 2022/03/25 15:17
- JavaScript sessionStorageを調べています。 1 2023/06/20 12:41
- その他(プログラミング・Web制作) pythonのWebスクレイピングでfind_allだとurlがNoneに 4 2022/04/17 18:21
- JavaScript 指定したパスが現URLに含まれていたら特定要素を削除するJavascriptのコードを教えてください 2 2023/04/27 17:58
- PHP PHPの構文で間違えが分からない 5 2022/07/11 16:38
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
携帯IApplicationのsuper
-
抽象クラスが継承されているか...
-
c# この高速化の方法あり? 2
-
[C@3331394などの文字列
-
クラスの直列化に関して
-
スクロールバーについて
-
Adapterデザインパターン
-
エンティティの実装方法について
-
独自アプリのAPI公開方法について
-
小規模のオープンソースについて
-
本当にオブジェクト指向プログ...
-
VC++2010の簡潔なマニュアルあ...
-
interface,extend,implementの...
-
JTextFieldの入力制限
-
WinInet Classを用いてSSL接続方法
-
今日は こどもの日 で、良い天...
-
エクセルVBAで、条件に一致する...
-
「タイプ初期化子が例外をスロ...
-
application暗黙オブジェクトで...
-
InternetExplorer.Application...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C# 「データが失なわれる可能性...
-
「継承されたメソッドの可視性...
-
(vba)他のアプリケーションの右...
-
【C#】クラスのコンストラクタ...
-
VB DLLプロジェクトについて
-
メソッドの引数にクラス名を渡す
-
「ラッパークラス」の存在意義...
-
interface,extend,implementの...
-
c++でのヘッダーファイルの循環...
-
このエラーメッセージの意味を...
-
委譲って何ですか?
-
ゲッターを使わないで変数にア...
-
Javaのインスタンス化の構文の...
-
ファイルパスが取得出来ない(P...
-
ASP.NETでの共通コードの書き方...
-
Commons-Discovery.jarとは?
-
デバッグ時に「Source not found」
-
JTextFieldの入力制限
-
JavaのimplementsをC言語で例え...
-
オーバーライドとラッパーの違い
おすすめ情報