DB2 ユニバーサル・データベースは、2 つの標準ベースの Java プログラミング API をインプリメントします。 Java データベース・コネクティビティー (JDBC) および Java Embedded SQL (SQLJ) です。この章では、JDBC および SQLJ プログラミングを概説しますが、その中でも特に、DB2 に固有な面に焦点を当てています。 JDBC および SQLJ の仕様のリンクについては、 DB2 ユニバーサル・データベース Java Web サイトを参照してください。
JDBC API を使用すると、データベースに対する動的 SQL 呼び出しを行う Java プログラムを作成することができます。 SQLJ アプリケーションは、 JDBC を基礎として使用してデータベースへの接続や SQL エラー処理などのタスクを実行しますが、 SQLJ ソース・ファイルに組み込み静的 SQL ステートメントを含めることもできます。 Java ソース・コードをコンパイルできるようにするには、 SQLJ 変換プログラムを使用して SQLJ ソース・ファイルを変換しなければなりません。
JDBC および SQLJ アプリケーションを作成することの詳細については、 アプリケーション構築の手引き を参照してください。
組み込み SQL を含むプログラム言語は、ホスト言語と呼ばれます。 Java は、SQL の組み込み方の点で、従来のホスト言語 C、COBOL、および FORTRAN とはかなり異なります。
省略時では、JDBC プログラムは、そのプログラムを実行している人に割り当てられている特権を使用して SQL ステートメントを実行します。一方、SQLJ プログラムは、そのプログラムを作成した人に割り当てられている特権を使用して SQL ステートメントを実行します。
ソース・ファイルは、次のような拡張子を持ちます。
対応する出力ファイルは、次のような拡張子を持ちます。
SQLJ プログラムのコンパイルおよび実行方法の例は、 SQLJ プログラムのコンパイルと実行を参照してください。
DB2 ユニバーサル・データベースは、 JDBC および SQLJ サポートにクラス・ライブラリーを提供します。これは、CLASSPATH に指定するか、アプレットに組み込まなければなりません。以下のものがあります。
ご使用のアプリケーションの DB2 に組み込まれているクラス・ライブラリーを使用するには、該当するインポート・パッケージ・ステートメントを、ソース・ファイルの先頭に含めなければなりません。ご使用の Java アプリケーションに以下のパッケージを使用できます。
表 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 バイトの文字ストリング |
SQL エラーが生じると、 JDBC および SQLJ プログラムは SQLException をスローします。 SQLException のインスタンスの SQLSTATE、SQLCODE、または SQLMSG 値を検索するには、対応するインスタンス・メソッドを呼び出します。以下のようにします。
以下はその例です。
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 }
CLI/ODBC/JDBC トレース機能および DB2 トレース機能の両方の db2trc を使用して、 JDBC または SQLJ プログラムに関係ある問題を診断することができます。上記のトレースを実行する方法の詳細については、 問題判別の手引き に説明されています。
実行時呼び出しトレース機能は、SQLJ プログラムにインストールすることもできます。このユーティリティーは、プログラムに関連するプロファイルを処理します。プログラムが App_SJProfile0 というプロファイルを使用するとします。プログラムに呼び出しトレースをインストールするには、次のコマンドを使用します。
profdb App_SJProfile0.ser
profdb ユーティリティーは、 Java 仮想マシンを使用して、クラス sqlj.runtime.profile.util.AuditorInstaller の main() 方式を実行します。 AuditorInstaller クラスの使用法およびオプションの詳細については、
データベース Java Web サイト にアクセスしてください。
ご使用のアプリケーションやアプレットが 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 つの独立コンポーネントがあります。
図 21 は、DB2 JDBC アプリケーションが動作する方法を示しています。 DB2 JDBC アプリケーションは、DB2 CLI アプリケーションと考えることができます。そのアプリケーションを Java 言語を使って作成するだけです。 Java のネイティブな方式で、JDBC の呼び出しは DB2 CLI の呼び出しに変換されます。 JDBC は、 DB2 クライアントから DB2 CLI を介して DB2 サーバーに至る流れを要求します。
SQLJ アプリケーションはこの JDBC サポートを使用します。それに加えて、SQLJ 実行時クラスが、プリコンパイルおよびバインド段階でデータベースにバインドされる任意の SQL パッケージを認証および実行する必要があります。
図 21. DB2 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 アプレットのインプリメンテーション
![]() |