アプリケーション開発の手引き


Java のプログラミングに関する考慮事項

DB2 ユニバーサル・データベースは、2 つの標準ベースの Java プログラミング API をインプリメントします。 Java データベース・コネクティビティー (JDBC) および Java Embedded SQL (SQLJ) です。この章では、JDBC および SQLJ プログラミングを概説しますが、その中でも特に、DB2 に固有な面に焦点を当てています。 JDBC および SQLJ の仕様のリンクについては、 DB2 ユニバーサル・データベース Java Web サイトを参照してください。

SQLJ と JDBC の比較

JDBC API を使用すると、データベースに対する動的 SQL 呼び出しを行う Java プログラムを作成することができます。 SQLJ アプリケーションは、 JDBC を基礎として使用してデータベースへの接続や SQL エラー処理などのタスクを実行しますが、 SQLJ ソース・ファイルに組み込み静的 SQL ステートメントを含めることもできます。 Java ソース・コードをコンパイルできるようにするには、 SQLJ 変換プログラムを使用して SQLJ ソース・ファイルを変換しなければなりません。

JDBC および SQLJ アプリケーションを作成することの詳細については、 アプリケーション構築の手引き を参照してください。

他の言語と比較した Java の利点

組み込み SQL を含むプログラム言語は、ホスト言語と呼ばれます。 Java は、SQL の組み込み方の点で、従来のホスト言語 C、COBOL、および FORTRAN とはかなり異なります。

Java における SQL 機密保護

省略時では、JDBC プログラムは、そのプログラムを実行している人に割り当てられている特権を使用して SQL ステートメントを実行します。一方、SQLJ プログラムは、そのプログラムを作成した人に割り当てられている特権を使用して SQL ステートメントを実行します。

Java のソースおよび出力ファイル

ソース・ファイルは、次のような拡張子を持ちます。

.java
Java ソース・ファイル。プリコンパイルの必要なし。これらのファイルは、Java 開発環境に組み込まれている javac Java コンパイラーを使用してコンパイルできます。
.sqlj
SQLJ ソース・ファイル。 sqlj 変換プログラムでの変換が必要です。 変換プログラムは、以下のものを作成します。

対応する出力ファイルは、次のような拡張子を持ちます。

.class
JDBC および SQLJ バイトコード・コンパイル済みファイル。
.ser
SQLJ 順次化プロファイル・ファイル。それぞれのプロファイル・ファイルについて、 db2profc ユーティリティーを使用してデータベースにパッケージを作成します。

SQLJ プログラムのコンパイルおよび実行方法の例は、 SQLJ プログラムのコンパイルと実行を参照してください。

Java クラス・ライブラリー

DB2 ユニバーサル・データベースは、 JDBC および SQLJ サポートにクラス・ライブラリーを提供します。これは、CLASSPATH に指定するか、アプレットに組み込まなければなりません。以下のものがあります。

db2java.zip
JDBC ドライバーおよび JDBC および SQLJ サポート・クラス。ストアード・プロシージャーおよび UDF サポートを含む。

sqlj.zip
SQLJ 変換プログラム・クラス・ファイル。

runtime.zip
SQLJ アプリケーションおよびアプレットへの Java ランタイム・サポート。

Java パッケージ

ご使用のアプリケーションの DB2 に組み込まれているクラス・ライブラリーを使用するには、該当するインポート・パッケージ・ステートメントを、ソース・ファイルの先頭に含めなければなりません。ご使用の Java アプリケーションに以下のパッケージを使用できます。

java.sql.*
JDK に組み込む JDBC API。このパッケージは、すべての JDBC および SQLJ プログラムにインポートしなければなりません。

sqlj.runtime.*
それぞれの DB2 クライアントに組み込まれている SQLJ サポート。このパッケージは、すべての SQLJ プログラムにインポートしなければなりません。

sqlj.runtime.ref.*
それぞれの DB2 クライアントに組み込まれている SQLJ サポート。このパッケージは、すべての SQLJ プログラムにインポートしなければなりません。

Java でサポートされている SQL データ・タイプ

表 31 では、 JDBC 仕様のデータ・タイプ・マッピングに基づいた、各 SQL データ・タイプに等しい Java の値を示しています。 JDBC バージョン 1.22 とバージョン 2.0 ドライバーのどちらを使用するかによって、いくつかのマッピングは異なることにも注意してください。 JDBC ドライバーは、アプリケーションとデータベースとの間で交換されるデータを、以下のマッピング・スキーマを使って変換します。これらのマッピングは、 Java アプリケーションと PARAMETER STYLE JAVA ストアード・プロシージャーと UDF とで使用します。 PARAMETER STYLE DB2GENERAL ストアード・プロシージャーおよび UDF のデータ・タイプ・マッピングの詳細については、 サポートされる SQL データ・タイプを参照してください。
注:DB2 によりサポートされるどのプログラム言語にも、 DATALINK データ・タイプのホスト言語サポートはありません。

表 31. Java 宣言にマップされる SQL データ・タイプ
SQL 列名 Java データ・タイプ SQL 列タイプ記述

SMALLINT
(500 または 501)

short 16 ビットの符号付き整数

INTEGER
(496 または 497)

int 32 ビットの符号付き整数

BIGINT
(492 または 493)

long 64 ビットの符号付き整数

REAL
(480 または 481)

float 単精度浮動小数点

DOUBLE
(480 または 481)

double 倍精度浮動小数点

DECIMAL(p,s)
(484 または 485)

java.math.BigDecimal パック 10 進数

CHAR(n)
(452 または 453)

String 長さが n の固定長文字ストリング (n の範囲は 1 〜 254 まで)

VARCHAR(n)
(448 または 449)

String 可変長文字ストリング

LONG VARCHAR
(456 または 457)

String long 可変長文字ストリング

CHAR(n)
FOR BIT DATA

バイト[] 長さが n の固定長文字ストリング (n の範囲は 1 〜 254 まで)

VARCHAR(n)
FOR BIT DATA

バイト[] 可変長文字ストリング

LONG VARCHAR
FOR BIT DATA

バイト[] long 可変長文字ストリング

BLOB(n)
(404 または 405)


JDBC 1.22: バイト[]
JDBC 2.0: java.sql.Blob

ラージ・オブジェクト可変長 2 進ストリング

CLOB(n)
(408 または 409)


JDBC 1.22: String
JDBC 2.0: java.sql.Clob

ラージ・オブジェクト可変長文字ストリング

DBCLOB(n)
(412 または 413)


JDBC 1.22: String
JDBC 2.0: java.sql.Clob

ラージ・オブジェクト可変長 2 バイト文字ストリング

DATE
(384 または 385)

java.sql.Date 10 バイトの文字ストリング

TIME
(388 または 389)

java.sql.Time 8 バイトの文字ストリング

TIMESTAMP
(392 または 393)

java.sql.Timestamp 26 バイトの文字ストリング

Java の SQLSTATE および SQLCODE 値

SQL エラーが生じると、 JDBC および SQLJ プログラムは SQLException をスローします。 SQLException のインスタンスの SQLSTATE、SQLCODE、または SQLMSG 値を検索するには、対応するインスタンス・メソッドを呼び出します。以下のようにします。

SQL 戻りコード
SQLException メソッド

SQLCODE
SQLException.getErrorCode()

SQLMSG
SQLException.getMessage()

SQLSTATE
SQLException.getSQLState()

以下はその例です。

    int sqlCode=0;      // Variable to hold SQLCODE
    String sqlState="00000";  // Variable to hold SQLSTATE
    try
    {
      // JDBC statements may throw SQLExceptions
      stmt.executeQuery("Your JDBC statement here");
      // SQLJ statements may also throw SQLExeptions
      #sql {..... your SQLJ statement here ......};
    }
    /* Here's how you can check for SQLCODEs and SQLSTATE */
    catch (SQLException e)
    {
      sqlCode = e.getErrorCode() // Get SQLCODE
      sqlState = e.getSQLState() // Get SQLSTATE
      if (sqlCode == -190 || sqlState.equals("42837"))
      {
        // Your code here to handle SQLCODE -190 or SQLSTATE 42837
      }
      else
      {
        // Your code here to handle other errors
      }
      System.err.println(e.getMessage()) ; // Print the exception
      System.exit(1);         // Exit
    }

Java のトレース機能

CLI/ODBC/JDBC トレース機能および DB2 トレース機能の両方の db2trc を使用して、 JDBC または SQLJ プログラムに関係ある問題を診断することができます。上記のトレースを実行する方法の詳細については、 問題判別の手引き に説明されています。

実行時呼び出しトレース機能は、SQLJ プログラムにインストールすることもできます。このユーティリティーは、プログラムに関連するプロファイルを処理します。プログラムが App_SJProfile0 というプロファイルを使用するとします。プログラムに呼び出しトレースをインストールするには、次のコマンドを使用します。

   profdb App_SJProfile0.ser

profdb ユーティリティーは、 Java 仮想マシンを使用して、クラス sqlj.runtime.profile.util.AuditorInstallermain() 方式を実行します。 AuditorInstaller クラスの使用法およびオプションの詳細については、

データベース Java Web サイト にアクセスしてください。

Java アプリケーションおよびアプレットの作成

ご使用のアプリケーションやアプレットが JDBC または SQLJ のいずれを使用するかにかかわらず、 Sun Microsystems の提供する JDBC 仕様に精通している必要があります。 JDBC および SQLJ リソースのリンクについては、の DB2 Java Web サイト を参照してください。この仕様書は、JDBC API を呼び出してデータベースにアクセスする方法と、データベース中のデータを操作する方法を説明しています。

加えて、JDBC への DB の拡張機能とそのいくつかの制限について学ぶために、この節を読み通す必要があります (JDBC 2.0を参照)。 Java によって UDF または ストアード・プロシージャーの作成を計画している場合、他の言語とは異なる Java 言語特有の考慮事項が記されている Java ユーザー定義の関数の作成および使用および Java ストアード・プロシージャーおよび UDF を参照してください。

JDBC および SQLJ アプリケーションおよびアプレットを作成および実行するには、 アプリケーション構築の手引き の指示に従ってオペレーティング・システム環境を設定しなければなりません。

動作の仕組み

DB2 の Java 使用可能性には、以下の 3 つの独立コンポーネントがあります。

Java のアプリケーション・サポート

図 21 は、DB2 JDBC アプリケーションが動作する方法を示しています。 DB2 JDBC アプリケーションは、DB2 CLI アプリケーションと考えることができます。そのアプリケーションを Java 言語を使って作成するだけです。 Java のネイティブな方式で、JDBC の呼び出しは DB2 CLI の呼び出しに変換されます。 JDBC は、 DB2 クライアントから DB2 CLI を介して DB2 サーバーに至る流れを要求します。

SQLJ アプリケーションはこの JDBC サポートを使用します。それに加えて、SQLJ 実行時クラスが、プリコンパイルおよびバインド段階でデータベースにバインドされる任意の SQL パッケージを認証および実行する必要があります。

図 21. DB2 Java アプリケーションのインプリメンテーション


DB2 Java アプリケーションのインプリメンテーション

Java のアプレット・サポート

図 22 は、 JDBC アプレット・ドライバー (ネット・ドライバー としても知られている) が動作する方法を示しています。ドライバーは JDBC クライアントおよび JDBC サーバー (db2jd) から成っています。 JDBC クライアント・ドライバーは、アプレットとともに Web ブラウザーにロードされます。アプレットによって DB2 データベースへの接続が要求された場合、クライアントは、Web サーバーが実行されているマシンの JDBC サーバーに対して TCP/IP ソケットをオープンします。接続が確立された後、クライアントは、TCP/IP 接続を介してアプレットから JDBC サーバーへ、後続のデータベースごとにアクセス要求を送ります。それから JDBC サーバーは、タスクを実行するために対応する CLI (ODBC) 呼び出しを行います。完了すると、 JDBC サーバーはその接続を介してクライアントに結果を送り返します。

SQLJ アプレットは、 JDBC クライアント・ドライバーの上に SQLJ クライアント・ドライバーを追加します。そうでない場合には、JDBC アプレットと同じように実行します。

DB2 JDBC サーバーの開始についての情報は、 コマンド解説書 にある db2jstrt コマンドを参照してください。

図 22. DB2 Java アプレットのインプリメンテーション


DB2 Java アプレットのインプリメンテーション


[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]