Javaでデータベースにアクセスする際のClass.forNameの意味とは?

このQ&Aのポイント
  • Javaでデータベースにアクセスする際には、Class.forName(driver)を使用します。これはJDBCドライバを登録するための処理です。
  • Class.forName(driver)を実行することで、指定されたドライバを動的にロードし、JVMに登録します。
  • Class.forName(driver)の目的は、データベースへの接続を行うために必要なドライバを準備することです。
回答を見る
  • ベストアンサー

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); ・・・・・・・・・・・・・・

  • guuman
  • お礼率86% (1043/1206)
  • Java
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • Bonjin
  • ベストアンサー率43% (418/971)
回答No.1

簡単に書くと、DriverをDriverManagerに登録するためです。 動作を順を追って書くと、 1.Class.forName()を呼び出すと、Driverのstaticイニシャライザ(static{}の部分)が呼ばれます。 2.DriverのstaticイニシャライザではDriver自身のインスタンスを生成してDriverManager.registerDriver()を呼び、DriverManagerにDriver自身を登録します。 3.DriverManager.getConnection()が呼ばれると、DriverManagerは登録されているDriverのacceptsURL()を呼び出し指定されたURLに対応出来るDriverが登録されているか調べます。そして、対応出来るDriverが見つかった場合はDriverのconnect()を呼び出してConnectionを取得します。 DriverManagerのソース、PostgerSQLやMySQLなどのJDBCドライバのソースは公開されているので見てみるとわかりやすいと思います。

guuman
質問者

お礼

詳しい説明ありがとうございました

関連する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
  • JDBCドライバの登録とデータベースとの接続のプログラムについて

    JAVAを使ってMySQLに接続したいのですが // JDBCドライバの登録 String driver = "org.gjt.mm.mysql.Driver"; // データベースの指定 String url = ".;%JAVA_HOME%\lib\tools.jar;mysql-connector-java-5.0.4-bin.jar"; String user = "root"; // 環境に応じて設定 String password = "ishi"; // 環境に応じて設定 Class.forName (driver); // データベースとの接続 con = DriverManager.getConnection(url, user, password); の部分がよくわかりません。研修先のパソコンではうまくできたのですが自宅のパソコンで実行環境を構築したところうまくいきません。 String userとString passwordの部分についてはMySQLで設定したものに設定しました。 String urlに関しても何か設定を変えなければいけないのでしょうか? また他に設定しなければならない部分があるのでしょうか?

    • ベストアンサー
    • Java
  • JDBC PostgreSQLで必要なファイルはあるのでしょうか?

    LinuxでPostgreSQLのデータベースをJDBCでアクセスしたいのですが、以下のソースで次のエラーが発生します。何か必要なファイルでもあるのでしょうか? java.lang.ClassNotFoundException:org.postgres.Driver また、LinuxのODBCも必要なファイルがあるのでしょうか? import java.sql.*; class jdbcSample2 { public static void main(String argv[]) { int a; String b; try { //Class.forName ("sun.jdbc.odbc.JdbcOdbcDriver"); //String url = "jdbc:odbc:test"; Class.forName ("org.postgres.Driver"); String url = "jdbc:postgresql://127.0.0.1:5432/test"; String user = ""; String password = ""; Connection con = DriverManager.getConnection(url, user, password); Statement stmt = con.createStatement (); String query = "select * from member;"; ResultSet rs = stmt.executeQuery (query); while(rs.next()){ a = rs.getInt(1); b = rs.getString(2); System.out.println(a + ", " + b); } rs.close(); stmt.close(); con.close(); } catch (SQLException ex) { System.err.println("SQL failed."); ex.printStackTrace (); } catch (Exception ex) { ex.printStackTrace (); } } }

  • javaのcsvダウンロードについて

    javaについてです。 現在 http://www58.atwiki.jp/chapati4it/m/pages/143.ht … このサイトのcsvファイルをダウンロードするプログラムを作りました。 そこで このサイトではString[][] rows =に 値を入れていますが、その前にデータベースに接続して getStringで値をとってきてString型に入れてそれをcsvとして表示させたいのですが、どうすればよいですか? jspでデータベースの内容を表示させるものはもともと作ってあって、 Class.forName("com.mysql.jdbc.Driver"); Connection conn=DriverManager.getConnection("jdbc:mysql://localhost/データベース名?" + "user=ユーザー&password=パスワード&useUnicode=true&characterEncoding=utf8"); request.setCharacterEncoding("utf8"); Statement st=conn.createStatement(); ResultSet res = st.executeQuery("select * from テーブル名 "); これを書いて、getStringで受っとてやればいいのかなと思うのですが... できれば一個のファイルにまとめたいのですが、わかる人よろしくお願いします。 javaの知識が不十分です。すいません

  • Javaでデータベースの内容をGUIで表示したい

    お世話になります。 SQL文で発行された内容をJListでリスト化して表示したいです。 コマンドライン上で内容を表示することは出来ていますが、上手くGUIで表示できません。 簡単に言えば、以下の2つのプログラムを組み合わせたいです。宜しくお願い致します。 // JListプログラム // import java.awt.*; import javax.swing.*; import javax.swing.event.*; class JListTest extends JFrame implements ListSelectionListener { JListTest() { getContentPane().setLayout(new FlowLayout()); String[] data = { "ListA", "ListB", "ListC", "ListD" }; JList lst = new JList(data); lst.addListSelectionListener(this); getContentPane().add(lst); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setTitle("JListTest"); setSize(200, 120); setVisible(true); } public void valueChanged(ListSelectionEvent e) { JList lst = (JList)e.getSource(); System.out.println(lst.getSelectedValue()); } public static void main(String[] args) { new JListTest(); } } // SQLプログラム // import java.sql.*; class DbTest { public static void main(String[] args) { int id; String name; try { // JDBCドライバの登録 String driver = "org.postgresql.Driver"; // データベースの指定 String server = "192.168.1.0"; // PostgreSQL サーバ ( IP または ホスト名 ) String dbname = "test"; // データベース名 String url = "jdbc:postgresql://" + server + "/" + dbname; String user = "test"; //データベース作成ユーザ名 String password = "xxxxxxxxxx"; //データベース作成ユーザパスワード Class.forName (driver); // データベースとの接続 Connection con = DriverManager.getConnection(url, user, password); // テーブル照会実行 Statement stmt = con.createStatement (); String sql = "SELECT * FROM test"; ResultSet rs = stmt.executeQuery (sql); // テーブル照会結果を出力 while(rs.next()){ id = rs.getInt("num"); name = rs.getString("name"); System.out.println(id); System.out.println(name); } // データベースのクローズ rs.close(); stmt.close(); con.close(); } catch (SQLException e) { System.err.println("SQL failed."); e.printStackTrace (); } catch (ClassNotFoundException ex) { ex.printStackTrace (); } } }

  • Google Web Toolkit(GWT)でのMySqlの接続

    こんにちは。現在GWT勉強中なのですが、MySqlの接続で大ハマリしています。どなたかご教示ください。 環境は以下のとおりです。 GWT:1.6.4 Eclipse:3.4.2 MySQL:5.1.31 MySQLConnector/J:5.1.7 EclipseでWeb Application Projectを作成し、デフォルトで作られる「GreetingServiceImpl」クラスの「public String greetServer(String input)」の中身を以下のように変更しました。 _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ public String greetServer(String input) { String msg = ""; try { Class.forName("com.mysql.jdbc.Driver").newInstance(); String url = "jdbc:mysql://localhost/gwt_samples"; String user = "root"; String password = "root"; Connection conn = DriverManager.getConnection(url, user, password); msg = "成功"; } catch(Exception e) { msg = "失敗"; } return msg; } _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ 初めはClass.forName()の行で「java.lang.ClassNotFoundException: com.mysql.jdbc.Driver」が発生していましたが、/war/WEB-INF/libにMySQLConnector/JのJARファイルを追加することで発生しなくなりました。 しかし今度は、DriverManager.getConnectionでおかしくなっているようなんですが、その行でステップ実行すると、「RPC.class」の「invokeAndEncodeResponse()」というメソッドの「catch InvocationTargetException e) 」のところまでジャンプしてしまいます。 どなたか分かる方教えてください。 また、不明点あればご指摘ください。

  • データベースへの接続で困ってます

    JSPを関連させてcom.mysql.jdbc.Driverというドライバでデータベースに接続したいのですが、エラーが出てしまってどうすればいいかお手上げ状態になっています。プログラムを貼るので、何かおかしいとこがありましたら教えてもらいたいです。よろしくお願いします。 /*プログラム*/ <%@ page import="java.sql.*" %> <html> <head> <title>データを表示する</title> </head> <body> <% //データベースに接続する Class.forName("com.mysql.jdbc.Driver"); String url = "jdbc:mysql://localhost/sqldb?useUnicode=true&characterEncoding=SJIS"; String user = "matsuzaki"; String password = "matsuzaki"; Connection conn = DriverManager.getConnection(url, user, password); //データを取得する Statement st = conn.createStatement(); String sql = "SELECT * FROM cd"; //実行するSQL ResultSet rs = st.executeQuery(sql); //データを全件表示する out.println("<table border=1>"); while(rs.next()){ out.println("<tr>"); out.println("<td>" + rs.getInt("name") + "</td>"); out.println("<td>" + rs.getString("artist") + "</td>"); out.println("<td>" + rs.getInt("price") + "</td>"); out.println("</tr>"); } out.println("</table>"); //データベース接続を閉じる conn.close(); %> </body> </html>

    • ベストアンサー
    • MySQL
  • JDBCでaccessから取得したデータをjTableに表示させたい。

    JDBCでaccessのデータベースから取得したデータをjTableに表示させたいのですが どのようにしたらセルのデータやタイトルを入力させることができますか? またデータベースを操作したらその結果を表示させたいと考えています。どのようにすれば実現できるでしょうか? accessのデータベースには以下のように接続していました。 Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); String str = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=hello.mdb"; Connection con = DriverManager.getConnection(str, "", ""); 開発環境はNetBeansを使用しています。

  • 『ClassNotFoundException: org.postgresql.Driver』というエラーが出る。

    CygwinにpostgreSQLをインストールして、JSPでデータベースを操作しようと考えています。 /usr/share/postgresql/java/postgresql.jarをCLASSPATHに追加し、以下に示すJSPを作成して実行したのですが、『java.lang.ClassNotFoundException: org.postgresql.Driver 』というエラーが出てデータベースにアクセスできません。 『$jar -xvf /usr/share/postgresql/java/postgresql.jar』を実行したところ、『org/postgresql/Driver.class』が抽出されましたので、ドライバクラスは間違ってはいないと思います。一体何が悪いのでしょうか。 <%@ page language="java" %> <%@ page contentType="text/html; charset=EUC_JP" %> <%@ page import="java.sql.*" %> <% Connection con = null; Statement stmt = null; try { Class.forName("org.postgresql.Driver"); String url = "jdbc:postgresql:(データベース名)"; con = DriverManager.getConnection(url, "(ユーザー名)", "(パスワード)"); stmt = con.createStatement(); (途中の処理) } catch(Exception e) { out.println(e); } finally { (データベースの切断処理) } postgreSQLはまだ始めたばかりですので初心者同然です。なるべく分かりやすく説明してくれると嬉しいです。 OSはWindowsXP, JSPコンテナはTomcat3.3.1を使用しています。どうぞよろしくお願い致します。

    • ベストアンサー
    • Java
  • javaからAccessをアクセスするときにファイルを直接指定できないのですか?

    JavaでMicrosoft Accessにアクセスするときに以下のプログラムでアクセスしました。 Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); Connection con = DriverManager.getConnection("jdbc:odbc:DBs"); このプログラムを作成する前にODBC データソース アドミニストレータでデータベースの登録を行いました。 データベース名はデータソース名に拡張子を付けた名前にしました。 ODBC データソース アドミニストレータの登録を行わずにプログラムの中にファイルの場所を記述してMicrosoft Accessにアクセスすることはできないのでしょうか?

専門家に質問してみよう