2.JDBC API

Java からデータベースにアクセスするときに使う JDBC API の基本操作について説明します。

(1) JDBC API の基本


 JDBCを使用してデータベースをアクセスするには基本的な操作があります。次の例は、データベース(MySQL)を参照し、結果を表示する Java アプリケーションのスタイルです。

//HelloWorldJDBCMySQL.java
import java.sql.*;

public class HelloWorldMySQLJDBC {
  public static void main(String[] args) {
    try {
      Class.forName("org.gjt.mm.mysql.Driver");
      Connection con = 
         DriverManager.getConnection
                   ("jdbc:mysql:///hellodb");
      Statement stmt = 
         con.createStatement();
      String sql = 
         "SELECT * FROM hello_world_table ";
      ResultSet rs = stmt.executeQuery(sql);

      while(rs.next()){
        int no = rs.getInt("NO");
        String lang = rs.getString("LANGUAGE");
        String msg = rs.getString("MESSAGE");
        System.out.println(no + " " +
                                 lang + " " + msg);
      }

      stmt.close();
      con.close(); 
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}

java.sql は必須




*1 ドライバクラスのロード
*2 データベースに接続


*3 SQL ステートメント
  オブジェクトの生成
*4 SQL 文の実行と結果取得
 SQL 文の記述
 (検索:テーブル、項目、条件)

*5 検索された行数分をループ
  int 型の項目 NOを取得
  文字型の項目 言語と
      メッセージを取得
  標準出力(表示)


*6 クローズ
  SQL stmt をクローズ
  データベースから切断
*7 Exception エラー
 標準エラーストリーム
 に出力


実行結果
C:\java_test>javac HelloWorldMySQLJDBC.java

C:\java_test>java HelloWorldMySQLJDBC
1 日本語 こんにちわ 世界
2 英語 Hello World
 ※MySQL テーブル 定義の内容 ==> hello_world_table


 上記プログラムのAPI 操作(朱記部分の命令)について説明します。尚、MySQL はフリーのリレーショナルデータベースです。そのインストールやDBの作成等の詳細は、ホームの「DB」を参照してください。また、MySQL JDBC ドライバも入手しないと、実行できません。

   MySQL ダウンロード    MySQL JDBC ダウンロード

 JDBC を利用するには次の前提が必要です。

  標準パッケージの import ( import java.sql.*; )

  ドライバクラスを提供しているパッケージの import( import vender.package; )


*1 ドライバクラスをロード

  java.lang.Class.forName クラスを使って、これから利用するJDBCドライバを
  登録します。登録されたドライバはメモリ上にロードされます。

Class.forName("ドライバクラス名");
  または
DriverManager.registerDriver(new ドライバクラス名());
  ※MySQLは「org.gjt.mm.mysql.Driver」(クラスパス指定で参照可能)

*2 データベースに接続  ・DB とのコネクション確立   DB への接続には Connection オブジェクトを使います。このとき、メソッド   DriverManager.getConnection が利用できます。
Connection con = DriverManager.getConnection("url","userid","passwd");
 ・url の指定   登録したドライバが、データソースを認識/接続確立できるように、データ   ソースを識別する URL を指定します。URL の形式は、ドライバのベンダーが   提供していますので、それにしたがってください。    url  jdbc:<subprotocol>:<subname> jdbc は プロトコルです subprotocol は ドライバ名またはデータベース接続機構の名前 subname は DB   ※「jdbc:mysql:///DB名」は、MySQLの指定方法のURLであり、次の書式です。    mysql のJDBCドライバーはこのURより、該当サーバのMySQLインストール先    のdataフォルダーのdbnameを探し確立します。 jdbc:mysql://[hostname][:port]/[dbname] [?param1=value1][&param2=value2].....  ・useridとpasswd の指定 データベースサーバの設定したuseridとpasswd を指定します。設定が 無ければ不要です。例では省略しました。 *3 SQL ステートメントオブジェクトの生成  ・DB を操作するための SQL 文を DB へ送るためにはに Statement   オブジェクトを使用し、SQL 文の実行のためのコンテナの役目をします。
Statement stmt = con.createStatement();
*4 SQL 文の実行   SQL 文を記述し、その結果を取得します。   ResultSet は、発行された SQL 文の実行結果を含む Java オブジェクトです。   これは指定されたデータ型で返され、Javaアプリケーション内で処理されます。
ResultSet rs = stmt.executeQuery("SQL 文");
 ※SQL 文の検索式に条件をつける場合、次のように指定できます。  SELECT ... WHERE hello_world_table.NO =1 *5 検索された行数分をループ   これらは、ResultSet オブジェクトのメソッドです。 next() カーソルを現在の位置の 1 行下に移動 getInt(Int columnIndex) 現在行のカラム値を int 型数値で取得 getString(String columnName) 現在行のカラム値を String 型文字列で取得  ※next()の戻り値は、新しい現在の行が有効な場合は true それ以上行がない   場合は false です。  ※検索式が1行限定でも、このような処理にします。ゼロ行の判断は、アプリケ   ーション側でカウントをとる必要があります。  ※getXXX メソッドは、JDBC ドライバがデータを指定された Java タイプに変換し   適切な Java の値を返します。int,String 以外のタイプは、「G. class index」   のResultSet インタフェースのメソッドを参照してください。  ※SQL タイプから Java タイプへのマッピングについては、JDBC の使用を参照   してください。 *6 クローズ   自動的に終了するのを待たないで、必要がなくなったらできるだけ早く明示的   に、クローズし、資源を解放します。 Statement.close() で、全ての Statement を でクローズ Connection.close() で、全ての Connection をクローズ *7 Exception エラー   Exception のキャッチ は必ず必要です。次のようにSQLException に限定する   こともできます。
try {
  // Connection
  // Statement
  // close

  } catch (SQLException ex) {
    while (ex != null) {
       System.out.println ("State: " + ex.getSQLState ());
       System.out.println ("Msg  : " + ex.getMessage ());
       System.out.println ("Code : " + ex.getErrorCode ());
  } catch (Exception e) {
    e.printStackTrace();
  }
}


(2) データベース情報の取得


データベースについての情報を得るにはデータベースメタデータオブジェクトを使用します。

//InfJDBC.java 

import java.sql.*;

public class InfJDBC {
  public static void main(String[] args) {
    try {
      // ドライバクラスをロード
      Class.forName("org.gjt.mm.mysql.Driver");
      // データベースへ接続
      Connection con = 
           DriverManager.getConnection("jdbc:mysql:///helloDB");

      // DB情報の入手
      DatabaseMetaData dbmd = con.getMetaData();
      // DB情報の表示
      System.out.println("URL      : " + dbmd.getURL());
      System.out.println("Driver   : " + dbmd.getDriverName());
      System.out.println("Version  : " + dbmd.getDriverVersion());
      System.out.println("Database : " +
                               dbmd.getDatabaseProductName());
      System.out.println("Version  : " 
                            dbmd.getDatabaseProductVersion());
      // データベースから切断 
      con.close(); 
    }  catch(Exception e) {
      e.printStackTrace();
    }
  }
}


 実行結果はこのようになります。

C:\java_test>java InfJDBC

URL      : jdbc:mysql:///helloDB
Driver   : Mark Matthews' MySQL Driver
Version  : 2.0.14
Database : MySQL
Version  : 3.23.49-nt

C:\java_test>

以上がJDBC API の基本操作とデータベースの情報の取得方法です。尚、SQL 文は 検索 (select) 以外の更新( update , insert , delete , commit 等)もありますので、ホームの「DB」を参照してください。

前の章(1.JDBC/ODBC とは)    次の章(3.ACCESS)