• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:こんにちは。質問させていただきます。)

javaのデータベース接続におけるClass.forNameの使い方とリフレクションの関係について

このQ&Aのポイント
  • javaのデータベース接続において、Class.forNameを使用することで、ドライバーをロードし、DriverManagerに登録することができます。
  • 具体的な流れとしては、Class.forNameメソッドを使い、指定したドライバーをロードします。このとき、ドライバー内のstaticイニシャライザが実行され、ドライバーが自身をDriverManagerに登録します。
  • したがって、リフレクションを使用することで、実行時に任意のクラスをロードすることができ、データベース接続においては、指定したドライバーを動的にロードするための手段として利用されます。

質問者が選んだベストアンサー

  • ベストアンサー
  • salsberry
  • ベストアンサー率69% (495/711)
回答No.1

Class.forName()はドライバークラスのstatic{}を実行するために使われているだけであって、本質ではありません。 static{}が実行できればClass.forName()以外の手段でも構わないわけです。実際、Java SE 6のJDBC 4.0ではユーザーがClass.forName()を呼ばなくていいようになっています。 どうしてドライバークラスのstatic{}でDriverManager.registerDriver()を実行して登録する設計になっているのかまでは知りません。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • java データベース接続

    javaの勉強していまして、質問があります。よろしくお願いします。 javaでデータベースの接続ができなくて迷っております。ずっとネットで調べてもダメでした。 ネットで調べたとおりにやっても、 例外発生:java.lang.ClassNotFoundException: sun.jdbc.odbc.JdbcOdbcDriver このようなエラーがでます。 eclipseを使ってます。windows7 練習にアクセスにつなごうと思ってます。 事前にデータソース(ODBC)の登録はしました。 ドライバーとかインストールするものなのでしょうか? package sample; import java.sql.Connection; import java.sql.DriverManager; public class Hello { public static void main(String args[]) { try { //JDBCドライバのロード Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); //各設定 String url = "jdbc:odbc:SampleDB030"; String user = ""; String pass = ""; //データベースに接続 Connection con = DriverManager.getConnection(url,user,pass); System.out.println("接続成功"); //データベースを切断 con.close(); } catch (Exception e) { System.out.println("例外発生:" + e ); } } }

    • ベストアンサー
    • Java
  • Javaでデータベースにアクセス

    するときに以下のように Class.forName (driver); をする必要があるのですが これの意味を教えてください なぜこれが必要なのでしょうか? ・・・・・・・・・・・・・ // JDBCドライバの登録 String driver = "org.postgresql.Driver"; // データベースの指定 String url = "jdbc:postgresql://fedorasrv.com/test"; //サーバ名またはIPアドレス+データベース名 String user = "fedora"; //データベース作成ユーザ名 String password = "XXXXXXXX"; //データベース作成ユーザパスワード Class.forName (driver); // データベースとの接続 Connection con = DriverManager.getConnection(url, user, password); ・・・・・・・・・・・・・・

    • ベストアンサー
    • Java
  • JDBCドライバの登録と接続

    javaプログラムでDBにアクセスをする時はドライバの名前とURLをしていしなければいけないらしいですが、わからなく困っています。 データベースはmySQLというフリーのものをインストール済みです。 ドライバの登録にClas.forName("ドライバ名")というクラス、 データベースへの接続はDriverManager.getConnection("URL","ユーザー名","パスワード")というクラスを用いるのは分かっているのですが、 引数に指定するドライバ名とURLがわからないです。 DBに詳しい方、ご回答よろしくお願いします。

  • MySQLへの接続なんですが・・。

    下記にあるJAVAのソースファイルがあるのですが、コンパイルしてクラスファイルをつくり、実行してもうまくいきません。 windows2000Professional, j2sdk1.4.0_01, MySQL3.23.47 // uc/BaseJdbc.java import java.sql.* ; public class BaseJdbc { public static void main(String[] args) { final String LINE = "---------------------------------------\n" ; try { Class.forName("org.gjt.mm.mysql.Driver") ; // JDBCドライバ登録 System.out.println("\n" + LINE + "MySQLのJDBCドライバを登録。") ; Connection connection = DriverManager.getConnection( "jdbc:mysql://localhost:3306/river_data", "Administrator","lled") ; System.out.println("データベース「jdbc:mysql://localhost/" + "river_data」へ接続。") ; } } } 下記、コマンドプロンプトにて実行画面。 D:\azMySq\uc\BaseJdbc>java BaseJdbc --------------------------------------- MySQLのJDBCドライバを登録。 java.sql.SQLException: Invalid authorization specification: Access denied for us er: 'Administrator@localhost' (Using password: YES) at org.gjt.mm.mysql.MysqlIO.init(MysqlIO.java:330) at org.gjt.mm.mysql.Connection.connectionInit(Connection.java:261) at org.gjt.mm.mysql.jdbc2.Connection.connectionInit(Connection.java:89) at org.gjt.mm.mysql.Driver.connect(Driver.java:167) at java.sql.DriverManager.getConnection(DriverManager.java:512) at java.sql.DriverManager.getConnection(DriverManager.java:171) at BaseJdbc.main(BaseJdbc.java:20)

  • JavaからMDB接続について

    下記PGについて ------------------------------------ import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class ClassDatabase { public static Connection connection; public static Statement statement; public static ResultSet resultSet; public void main(String DBNM) { try { // Load the UCanAccess JDBC driver Class.forName("net.ucanaccess.jdbc.UcanaccessDriver"); // Define the database URL String url = "jdbc:ucanaccess://" + DBNM + ";"; // Establish the connection DB_CONNECT(url); } catch (ClassNotFoundException e) { e.printStackTrace(); } } public static void DB_CONNECT(String url) { try { connection = DriverManager.getConnection(url); } catch (SQLException e) { e.printStackTrace(); } finally { // Close the connection when you're done if (connection != null) { try { connection.close(); } catch (SQLException e) { e.printStackTrace(); } } } ------------------------------------ connection = DriverManager.getConnection(url);の所ですが応答が帰って来ないほど遅いのですがどうにかなりますでしょうか? MDBと接続はできています。(整合性チェック等を行っているようです、させない方法等ありますでしょうか?)

    • ベストアンサー
    • Java
  • javaでMySQLのデータ検索

    以下のサイトでただいま勉強しています。環境はMySQL4.0.15です。 http://msugai.fc2web.com/java/JDBC/mmMySQL.html ●JDBC ソースコードのところでつまづいています。 javaの実行 C:\java>java JdbcSample Exception: com.mysql.jdbc.Driver java.lang.ClassNotFoundException: com.mysql.jdbc.Driver  … // 1.JDBC Driver の登録 // 2.データベースへの接続 のあたりでエラーが発生している状態です。データベースの接続はAccess環境なら『コントロールパネル』→『管理ツール』→『データソース(ODBC)』で使用するデータベースを設定します。MySQLもこのあたりの設定が必要なんでしょうか? ●Accessの場合 Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); Connection Con = DriverManager.getConnection("jdbc:odbc:設定したデータベース名"); アドバイスお願いします。

  • ServletでJDBCを使う時

    servletでJDBCを使ってデータベースに接続しようと思っていますが、 servletのdoGetの中で、 Class.forName("com.mysql.jdbc.Driver"); と書くとClassNotFoundExceptionエラーになります。 public static Connection getConnection() などのクラスを作って、その中で Class.forName("com.mysql.jdbc.Driver"); と書くとエラーにはならないのですが、doGetの中では宣言できないのでしょうか?自分が何か勘違いしていたら申し訳ございません。 ご助言お願いいたします。

    • ベストアンサー
    • Java
  • ストアドプロシージャについて

    ストアドプロシージャで、Accessのクエリーを実行させテーブルの中の指定したIDのデータを削除させるという流れなのですが・・ 以下のソースで実行はできるのですが、削除ができていないので原因がわかりません。アドバイスお願いします。 package CallableStatement; import java.sql.*; import java.io.*; public class cCallableStatement { public static void main(String[] args) { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); Connection db=DriverManager.getConnection("jdbc:odbc:sample","",""); CallableStatement cllDelete; int ID = 3;        // 削除 cllDelete = db.prepareCall("{call DELETE(?)}"); cllDelete.setInt(1,ID); cllDelete.executeUpdate(); } } 環境はwin2000 pro forte for java 4.0 jdk : 1.4 データベース: Access2000

  • Javaアプリケーションで動くJDBCがサーブレットで動かない

    Javaアプリケーションでは動いていたJDBCのソースをサーブレットの中に組み込むと例外が発生して動きません。 JDBCドライバ(Thinドライバ)をDriverManagerに登録するところ  Class.forName("oracle.jdbc.driver.OracleDriver"); でClassNotFoundExceptionが発生します。 何か設定が足りないのでしょうか? どこを確認すべきか教えてください。お願いします。 ちなみに環境は以下の通りです。 ・Windows2000 ・Apache1.3.26 ・Tomcat3.2.4 ・JDK1.3.1_02

    • ベストアンサー
    • Java
  • JDBC ドライバーのロードの方法について

    すみませんが、どなたか教えていただけないでしょうか。 JDBCを使ってデータベースにアクセスしようとする場合に、まずドライバーのロードが必要ですが、 1.Class.forName("ドライバー名"); 2.Class.forName("ドライバー名").newInstance(); 1の方法と2の方法の違いは何かあるのでしょうか?今まで私は1の方法を使っていたのですが、2の方法があると知り、どのようなときに使うものなのかわかりません。このようなときにはこっちを使う、というようなルールや目安などありましたら、教えていただけますでしょうか。 ちなみに私は、データベースはDB2を使っています。 ↓また、以前に似たような(?)質問も見受けられたのですが、私にはちょっと難しくて理解できませんでした… http://okweb.jp/kotaeru.php3?q=642489 どうぞよろしくお願いいたします。

    • ベストアンサー
    • Java