Java で データベースに接続するときには、以下のように Class.forName メソッドでクラスをロードするようにします。これは、単なるおまじないではありません。
『おまじないだと思って書いとけばいいよ』 って若者にバカにされたように教わりました(怒)。どうも本人はわかっていないようでしたが、プライドは高い人のようでした。(おっちゃんキれたら出川より怖いよ。ヤバイヨ ヤバイヨー)
スポンサーリンク
データベース接続するサンプル
import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; /* * MySQL に接続する場合 */ Class.forName("com.mysql.jdbc.Driver").newInstance(); Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/test?user=user&password=pass"); /* * オラクル に接続する場合 */ Class.forName("oracle.jdbc.driver.OracleDriver"); Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:ORCL", "user", "password");
どうして、Class.forName でクラスをロードしたからと言って、DriverManager.getConnection でデータベースに接続できるのでしょうか?
これは、JDBC ドライバクラスの static 初期化子で DriverManager に自身を登録しているからです。以下に、OracleDriver クラスの処理内容を抜粋(コメント追加)して掲載しています。
public class OracleDriver implements Driver { ・・・・・ ・・・・・ private static OracleDriver defaultDriver; /* * static 初期化子 * -------------------------------------- * Class.forName でロードされたときに実行される * */ static { defaultDriver = null; Timestamp timestamp = Timestamp.valueOf("2000-01-01 00:00:00.0"); try { if(defaultDriver == null) { defaultDriver = new OracleDriver(); DriverManager.registerDriver(defaultDriver); } } catch(RuntimeException runtimeexception) { } catch(SQLException sqlexception) { } } ・・・・・ ・・・・・ }
ということで、Class.forName メソッドで DriverManager に JDBC ドライバを登録しているのではなく、 Class.forName メソッドでクラスをロードすることで、ドライバ登録ロジックが実行されるということがわかります。