2017-02-09 8 views
2

Class.forNameメソッドが静的ブロックを初期化することがわかりました。JDBCのClass.forName()メソッドは何ですか?

Class.forName("com.mysql.jdbc.Driver").newInstance(); 

このメソッドを呼び出す必要はありません。しかし、人々は常にjdbc 4.0バージョンの後でもこのメソッドを使用します。私の質問は、jdbc 4.0を使用している場合、なぜこのメソッドを使用する必要があるのですか? JDBC 4.0以降のClass.forName()メソッドは何ですか?

これは私のコード例です。私はライブラリにmysql-connector.jarを追加するだけです。このコードを実行すると完全に動作します。

Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306","root","root"); 
Statement stmt = con.createStatement(); 
System.out.println("Created DB Connection...."); 
+4

コードをコピーするだけの人。あなたがそれを必要としないと思うなら、それなしであなたのコードを試してください。 –

+2

"jdbc 4.0で実行する必要はありません"とまったく同じです。これは余分なことを何もしないことを意味し、あなたはそれを呼び出す必要はありません。なぜ人々はまだそれを行うのですか?習慣、無知、「安全のため」(jdbc 4.0より前に配備されているそのコードの可能性があります)。あなたは上記のいずれかを選ぶことができ、それぞれは誰かに適用されます。 –

+0

ドライバクラスがシステムクラスパス上になく、コンテキストクラスパス(driver.jarがWebアプリケーションWARの一部である場合のみ)の場合のみ、 'Class.forName'を使用してドライバをロードする必要があります。 –

答えて

4

与えられたFQNによって表されるClassオブジェクトを取得します。以前にロードされていない場合は、クラスもロードされます。これには、静的クラス変数の初期化と静的ブロックの実行の副作用があります。

最近のJDBCバージョンでは、古いドライババージョンを使用してドライバをロードする必要はありませんでした。

+1

私は新しいコードサンプルで*使用された理由を質問したと思います。 –

1

質問: 誰もがjdbc 4.0を使用していることを知っていますが、それはわかりません。 これは、古い機器または古い機器でテストしている人のために追加します。

+0

誰かが古いバージョンを使用しているかどうかわかりません。しかし、常に防衛策の束を追加することはあなたに良いことはしません。誰かが古いバージョンを実行している場合は、これを処理してください。彼らはいつもあなたが実行している環境よりも実行環境についてもっと知っています。そこにあるすべてのライブラリの組み合わせを考慮に入れることはできません。 –

2

最新のランタイムでは、1つの点を除いてかなり無意味です:ランタイムクラスパスで(正しい)ドライバjarが見つからない場合、このコード行はあなたに正確に伝えます。

コードを削除すると、コードが接続の作成を試みるときに一般的なエラーが発生します。間違ったJDBC接続URLを使用するという、よくある間違いを含むいくつかのソースを持つ障害です。それは問題を解決しようとしている水を混乱させる。

関連する問題