5.JDBC API ( Applet )

Java からデータベースにアクセスする JDBC API を Applet 版で説明します。

(1) JDBC API ( Applet )


 前章では、JDBCを使用してデータベースをアクセスする JSP について説明しました。ここでは Applet について説明します。まず、Applet には次の制約があります。
 ・アプレットは、自分がダウンロードされたサイトのファイルシステムしかアクセスできないので、DBMS も Web サーバ上におく必要があります( DBMS サーバにできない)。

 ・アプレットは、自分をダウンロードしたクライアントのネィティブファイルはアクセスできません。

 次の例は、データベース(MySQL)を参照し、結果を表示する Java Applet のスタイルです。

// HelloWorldAppletMySQLJDBC.java
import java.applet.Applet;
import java.sql.*;
import java.awt.*;

public class HelloWorldAppletMySQLJDBC 
                             extends Applet {

  public void paint(Graphics g) {
    try {
      Class.forName("org.gjt.mm.mysql.Driver");

      Connection con = DriverManager.getConnection
                   ("jdbc:mysql:///hellodb");
      g.drawString("MySQL 検索結果",20,30);
      System.out.println("MySQL 検索結果");
      Statement stmt = con.createStatement();
      String sql = 
         "SELECT * FROM hello_world_table";
      ResultSet rs = stmt.executeQuery(sql);

      int r = 50;
      while(rs.next()){
         int no = rs.getInt("NO");
         String lang = rs.getString("LANGUAGE");
         String msg = rs.getString("MESSAGE");
         String txt = no + "  " + lang + " " + msg ;
         g.drawString(txt,20,r);
         r = r + 15;
         System.out.println("console : " + txt);
      }

      stmt.close();
      con.close();

    } catch (SQLException e) {
      System.out.println("Exce:" + e.getMessage());
      System.out.println(" SQL:" + e.getSQLState());
      System.out.println(" Cod:" + e.getErrorCode());
    } catch (Exception e2) {
      System.out.println("Excep:" + e2.getMessage());
    }
  }
}

Applet 必須
java.sql 必須
paint 用

Applet 派生クラス




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

*2 データベースに接続

コンソールにも表示
左記内容を表示
*3 SQL ステートメント
  オブジェクトの生成
*4 SQL 文の実行と結果取得



*5 検索された行数分ループ
  int 型の項目 NOを取得
  文字型の項目 言語と
      メッセージを取得
  出力内容編集
  Applet出力

  コンソールにも表示
  (java console )

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





<!--jl355_HelloWorldAppletMySQLJDBC.html -->
<html lang="ja">
 :
<hr>
<applet code="HelloWorldAppletMySQLJDBC" 
     archive="mysql-connector-java-2.0.14-bin.jar"
     width="100" height="100">
applet not found
</applet>

 :
</html>



アプレットクラス
JDBC ドライバ
表示窓のサイズ
代替メッセージ




 ※*1 〜 *7 は前章の説明と同じですので、ここでは省略します。

 ※MySQL テーブル 定義の内容 ==> hello_world_table


  実行例 ( 当契約のプロバイダでは MySQL が使用できないので結果だけを表示 )
        ( リコンパイルのときは、一旦ブラウザーを閉じて再起動 )



     実際のHTMLソース    実際のApplet ソース

 Java Applet では、ローカル・マシンのCLASSPATHで切ってあるMySQL Connector/Jドライバは使うことができません。この問題を解決するためには、MySQL のJDBCのJARファイルもこのアプレットと共にサーバ・マシンからダウンロードし、それを使う必要があります。そのためには、HTMLの applet 要素に archive 属性を与えてサーバ・マシン上のJARファイルを指定します。

webapps (ルート)  ・・・  "C:\Program Files\Apache Group\Tomcat 4.1\webapps\"
 │
 ├─ examples
 │      ├─ applet  ─┬─ HelloWorldAppletMySQLJDBC.class
 │      │             ├─ HelloWorldAppletMySQLJDBC.html
 │      │             └─ HelloWorldAppletMySQLJDBC.java
 │      │
 │      ├─ jsp     ─── 
 │      ├─ servlet ─── 
 │      │
 │      └─ WEB-INF ─┬─ web.xml
 │                     ├─ lib     ─ mysql-connector-java-2.0.14-bin.jar


 尚、MySQL はフリーのリレーショナルデータベースです。そのインストールやDBの作成等の詳細は、ホームの「DB」を参照してください。また、MySQL JDBC ドライバも入手しないと、実行できません。

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

MySQL Connector/Jドライバ は、Java Aplication,JSP/Servlet,Applet で使用できるように、JDBC フォルダーを作って、ドライバがロードできるようにする仕組みが必要です。いずれ実用編で、実際のシステム開発の設計、製造をサンプルとして説明していきたいと思います。


(2) もう一つの Applet の例


 アプレット本来の機能に、アプレットが初めて起動されたとき1回だけ実行されるinit()メソッド、アプレットが消滅するときに呼び出される destroy()メソッドなどがあり、これを利用してDBの接続やクローズすることも可能です。

 (2)-1 DB アクセス

 

 以下の例は最初の説明した処理と同じであり、init()、destroy()メソッドを使用しただけです。

// HelloWorldAppletMySQLJDBC2.java
import java.applet.Applet;
import java.sql.*;
import java.awt.*;

public class HelloWorldAppletMySQLJDBC2 extends Applet {
  Connection con = null;

  public void init() {
    try {
      System.out.println("applet start");
      Class.forName("org.gjt.mm.mysql.Driver");

      con = DriverManager.getConnection
                   ("jdbc:mysql:///hellodb");

    } catch (SQLException e) {
      System.out.println("Excep:" + e.getMessage());
      System.out.println(" SQL :" + e.getSQLState());
      System.out.println(" Code:" + e.getErrorCode());
    } catch (Exception e2) {
      System.out.println("Excep:" + e2.getMessage());
    }
  }

  public void paint(Graphics g) {
    try {
      g.drawString("MySQL 検索結果2",20,30);
      Statement stmt = con.createStatement();
      String sql = "SELECT * FROM hello_world_table";
      ResultSet rs = stmt.executeQuery(sql);

      int r = 50;
      while(rs.next()){
         int    no = rs.getInt("NO");
         String lang = rs.getString("LANGUAGE");
         String msg = rs.getString("MESSAGE");
         String txt = no + "  " + lang + "  " + msg ;
         g.drawString(txt,20,r);
         r = r + 15;

         System.out.println("console : " + txt);
      }

      stmt.close();

    } catch (SQLException e) {
      System.out.println("Excep:" + e.getMessage());
      System.out.println(" SQL :" + e.getSQLState());
      System.out.println(" Code:" + e.getErrorCode());
    } catch (Exception e2) {
      System.out.println("Excep:" + e2.getMessage());
    }
  }

  public void destroy() {

    try {
      if ( con != null ) con.close();
      System.out.println("applet end");
    } catch (SQLException e) {
      System.out.println("Excep:" + e.getMessage());
      System.out.println(" SQL :" + e.getSQLState());
      System.out.println(" Code:" + e.getErrorCode());
    } catch (Exception e2) {
      System.out.println("Excep:" + e2.getMessage());
    }
  }
}
コメント





con オブジェクト

(最初1回だけ)

コンソール開始MSG
ドライバロード

DB 接続


例外








ここから
毎回の処理





 縦の表示位置
 複数行処理
  NOの値
  LANGUAGEの値
  MESSAGEの値
  表示行編集
  表示
  縦の表示位
    + 50
 コンソールにも表示


 SQL 文クローズ

 例外








(消滅時1回だけ)


 DB 切断
 終了MSG








Applet end

Applet はクライアント側で実行されます。JDBC はその実行中にサーバーと通信してDB をアクセスするものです。


前の章(4.JDBC API JSP)    次の章(6.JDBC Transaction )