DB2 Version 9.7 for Linux, UNIX, and Windows

現行の IBM Data Server Driver for JDBC and SQLJ と以前の DB2 JDBC ドライバーとの JDBC の相違点

JDBC アプリケーションを古いドライバーから IBM® Data Server Driver for JDBC and SQLJ にアップグレードする前に、それらのドライバー間の相違点を理解する必要があります。

重要: Linux、UNIX、および Windows 用の DB2® JDBC Type 2 ドライバー (DB2 JDBC Type 2 ドライバー) は、推奨されていません。 この情報は、アプリケーションの IBM Data Server Driver for JDBC and SQLJ への移行を支援するために提供されています。

サポートされるメソッド

JDBC ドライバーによりサポートされるメソッドの比較については、『JDBC API でのドライバーのサポート』を参照してください。

JDBC ドライバーによる連続ストリーミングの使用

IBM Data Server Driver for JDBC and SQLJ バージョン 3.50 以降の場合、連続ストリーミングの使用は、DB2 for Linux, UNIX, and Windows バージョン 9.5 以降への接続の場合の LOB 検索のデフォルトです。

連続ストリーミングは IBM Data Server Driver for JDBC and SQLJ バージョン 3.1 以降でサポートされています。 ただし、IBM Data Server Driver for JDBC and SQLJ バージョン 3.2 以降では、連続ストリーミングの使用は、DB2 for z/OS® バージョン 9.1 以降への接続の場合の LOB および XML 検索のデフォルトです。

IBM Data Server Driver for JDBC and SQLJ の以前のバージョンおよび DB2 JDBC Type 2 ドライバーは、連続ストリーミングをサポートしませんでした。

重要: 連続ストリーミングでは、LOB または XML の値を ResultSet からアプリケーション変数に取り出す場合、カーソルを移動するまで、または ResultSet 上のカーソルをクローズするまでは、そのアプリケーション変数の内容を操作できます。 その後は、アプリケーション変数の内容は操作できなくなります。 アプリケーション変数内の LOB に対して何らかのアクションを実行すると、SQLException を受け取ります。 例えば、連続ストリーミングが有効で、以下のようなステートメントを実行するとします。
… 
ResultSet rs = stmt.executeQuery("SELECT CLOBCOL FROM MY_TABLE");
rs.next();                // Retrieve the first row of the ResultSet 
Clob clobFromRow1  = rs.getClob(1); 
                          // Put the CLOB from the first column of
                          // the first row in an application variable
String substr1Clob = clobFromRow1.getSubString(1,50);
                          // Retrieve the first 50 bytes of the CLOB
rs.next();                // Move the cursor to the next row.
                          // clobFromRow1 is no longer available.
// String substr2Clob = clobFromRow1.getSubString(51,100);
                          // This statement would yield an SQLException
Clob clobFromRow2  = rs.getClob(1); 
                          // Put the CLOB from the first column of 
                          // the second row in an application variable
rs.close();               // Close the ResultSet. 
                          // clobFromRow2 is also no longer available.
rs.next() を実行してカーソルを ResultSet の 2 番目の行に置いた後は、clobFromRow1 内の CLOB 値は使用できなくなります。 同様に、rs.close() を実行して ResultSet をクローズした後、clobFromRow1 および clobFromRow2 内の値は使用できなくなります。

この動作の変更によるエラーを避けるには、以下のアクションのいずれかをとる必要があります。

IBM Data Server Driver for JDBC and SQLJ バージョン 4.0 以降の ResultSetMetaData 値

IBM Data Server Driver for JDBC and SQLJ バージョン 4.0 以降の場合、ResultSetMetaData.getColumnName および ResultSetMetaData.getColumnLabel のデフォルトの動作は、それ以前の JDBC ドライバーのデフォルトの動作とは異なります。

IBM Data Server Driver for JDBC and SQLJ バージョン 4.0 以降を使用する必要があるが、アプリケーションが旧バージョンの JDBC ドライバーで戻された ResultSetMetaData.getColumnName および ResultSetMetaData.getColumnLabel の値を戻す必要がある場合、useJDBC4ColumnNameAndLabelSemantics Connection および DataSource プロパティーを DB2BaseDataSource.NO (2) に設定できます。

自動生成キーを使用したバッチ更新の結果はドライバーのバージョンによって異なる

IBM Data Server Driver for JDBC and SQLJ バージョン 3.52 以降では、自動生成キーの取り出し対応の SQL ステートメントを準備する機能がサポートされています。

IBM Data Server Driver for JDBC and SQLJ バージョン 3.50 またはバージョン 3.51 を使用する場合、SQL ステートメントを自動生成キーの取り出しのために準備し、バッチ更新に PreparedStatement オブジェクトを使用すると、SQLException が出されます。

IBM Data Server Driver for JDBC and SQLJ のバージョン 3.50 より前のバージョンは、自動生成キーを戻すように準備された PreparedStatement オブジェクトに対してアプリケーションが addBatch または executeBatch メソッドを呼び出すときに、SQLException をスローしません。 ただし、PreparedStatement オブジェクトは自動生成キーを戻しません。

CURRENT CLIENT_ACCTNG 特殊レジスターの初期値

IBM Data Server Driver for JDBC and SQLJ バージョン 2.6 以降で実行される JDBC または SQLJ アプリケーションで、タイプ 4 接続が使用されている場合、DB2 for z/OS CURRENT CLIENT_ACCTNG 特殊レジスターの初期値は、DB2 for z/OS のバージョン番号と clientWorkStation プロパティーの値とを連結したものです。 JDBC ドライバー、バージョン、または接続のいずれかがそれとは異なる場合、初期値は設定されていません。

スクロール可能 ResultSet および更新可能 ResultSet のサポート

IBM Data Server Driver for JDBC and SQLJ は、スクロール可能 ResultSet および更新可能 ResultSet をサポートします。

DB2 JDBC Type 2 ドライバーはスクロール可能 ResultSet をサポートしますが、更新可能 ResultSet はサポートしません。

URL 構文の相違点

DriverManager.getConnection メソッドの url パラメーターの構文はドライバーごとに異なります。 詳細については、以下のトピックを参照してください。
  • 『DriverManager インターフェースと IBM Data Server Driver for JDBC and SQLJ を使用したデータ・ソースへの接続』
  • 『DriverManager インターフェースと DB2 JDBC Type 2 ドライバーを使用したデータ・ソースへの接続』

ドライバー・エラーについて戻されるエラー・コードと SQLSTATE の相違点

IBM Data Server Driver for JDBC and SQLJ は、他のドライバーとは異なり、内部エラーには既存の SQLCODE または SQLSTATE を使用しません。 『IBM Data Server Driver for JDBC and SQLJ から発行されるエラー・コード』と『IBM Data Server Driver for JDBC and SQLJ から発行される SQLSTATE』を参照してください。

JDBC/SQLJ driver for OS/390® and z/OS で内部エラーが発生した場合、ODBC SQLSTATE が返されます。

エラー・メッセージ・テキストが戻される程度

IBM Data Server Driver for JDBC and SQLJ では、SQLException.getMessage() を実行する際に、retrieveMessagesFromServerOnGetMessage プロパティーが true に設定されていなければ、フォーマット済みメッセージ・テキストは戻されません。

DB2 JDBC Type 2 ドライバーでは、SQLException.getMessage() を実行すると、フォーマット済みメッセージ・テキストが戻されます。

セキュリティー・メカニズム

JDBC ドライバーには様々なセキュリティー・メカニズムがあります。

IBM Data Server Driver for JDBC and SQLJ セキュリティー・メカニズムについては、『IBM Data Server Driver for JDBC and SQLJ 使用時のセキュリティー』を参照してください。

DB2 JDBC Type 2 ドライバーのセキュリティー・メカニズムについては、『DB2 JDBC Type 2 ドライバー使用時のセキュリティー』を参照してください。

読み取り専用接続のサポート

IBM Data Server Driver for JDBC and SQLJ では、Connection または DataSource オブジェクトの readOnly プロパティーにより、接続を読み取り専用にすることができます。

DB2 JDBC Type 2 ドライバーは、接続を読み取り専用にするかどうかを判別する際に Connection.setReadOnly 値を使用します。 ただし、Connection.setReadOnly(true) を設定しても、接続が読み取り専用になるとは限りません。

BIT DATA 列について ResultSet.getString から戻される結果

IBM Data Server Driver for JDBC and SQLJ は、CHAR FOR BIT DATA または VARCHAR FOR BIT DATA 列について ResultSet.getString 呼び出しからのデータを小文字の 16 進数ストリングとして戻します。

DB2 JDBC Type 2 ドライバーはデータを大文字の 16 進数ストリングとして戻します。

TIMESTAMP 列について ResultSet.getString から戻される結果

デフォルトで、IBM Data Server Driver for JDBC and SQLJ は、ResultSet.getString 呼び出しによって TIMESTAMP 列値のデータを返すとき、後続ゼロを切り捨てます。 この動作は、timestampPrecisionReporting プロパティーで変更することができます。

DB2 JDBC Type 2 ドライバーは、ResultSet.getString 呼び出しによって TIMESTAMP 列値のデータを返すとき、後続ゼロを切り捨てません。

どの行にも影響しない executeUpdate 呼び出しの結果

executeUpdate 呼び出しがどの行にも影響を与えない場合、IBM Data Server Driver for JDBC and SQLJSQLWarning を生成します。

DB2 JDBC Type 2 ドライバーは SQLWarning を生成しません。

TIMESTAMP 列についての getDate または getTime 呼び出しの結果

getDate または getTime 呼び出しが TIMESTAMP 列に対して行われる場合、IBM Data Server Driver for JDBC and SQLJSQLWarning を生成しません。

getDate または getTime 呼び出しが TIMESTAMP 列に対して行われる場合、DB2 JDBC Type 2 ドライバーは SQLWarning を生成します。

現実の日付および時刻に対応しない入出力値の日付および時刻の調整

SQL の DATE、TIME、または TIMESTAMP 列のデータを更新したり取り出したりする際に、現実の日付および時刻に対応しない日付および時刻の値は、IBM Data Server Driver for JDBC and SQLJ によって調整されます。 例えば、TIMESTAMP 列を更新して値を 2007-12-31 24:00:00.0 にしようとすると、IBM Data Server Driver for JDBC and SQLJ によってその値は 2008-01-01 00:00:00.0 に調整されます。 TIMESTAMP 列を更新して値を 9999-12-31 24:00:00.0 にしようとすると、調整後の値 10000-01-01 00:00:00.0 が無効であるため、IBM Data Server Driver for JDBC and SQLJ により例外がスローされます。

DB2 JDBC Type 2 Driver for Linux, UNIX and Windows では、現実の日付または時刻に対応しない日付または時刻の値に対して調整処理が実行されません。 このドライバーでは、データベースとの間で値がそのままやり取りされます。 例えば、DB2 JDBC Type 2 Driver for Linux, UNIX and Windows で TIMESTAMP 列を更新して値を 9999-12-31 24:00:00.0 にしようとしても、例外はスローされません。 詳しくは、『JDBC および SQLJ アプリケーションで問題が発生する可能性のある日付、時刻、およびタイム・スタンプの値』を参照してください。

DATE、TIME、または TIMESTAMP 列データをストリングに取り出すためのデフォルト形式

DB2 JDBC Type 2 Driver for Linux, UNIX and Windows の場合、DATE、TIME、または TIMESTAMP 列のデータを取り出してストリング変数に入れる場合のデフォルトの形式は、CLI のキーワード DateTimeStringFormat によってデフォルトの形式を変更したのでない限り、JIS 形式です。

IBM Data Server Driver for JDBC and SQLJ の場合、DATE、TIME、または TIMESTAMP 列データをストリングに取り出すためのデフォルト形式は ISO です。ただし、dateFormat または timeFormat Connection またはDataSource プロパティーによってこのデフォルト形式が変更された場合は例外です。

長さが一致しない PreparedStatement.setXXXStream について例外がスローされる場合

PreparedStatement.setBinaryStreamPreparedStatement.setCharacterStream、または PreparedStatement.setUnicodeStream メソッドを使用する場合、length パラメーター値は入力ストリーム内のバイト数に一致しなければなりません。

バイト数が一致しない場合、後続の PreparedStatement.executeUpdate メソッドが実行するまで、IBM Data Server Driver for JDBC and SQLJ は例外をスローしません。 そのため、IBM Data Server Driver for JDBC and SQLJ では、長さが一致しないと、一部のデータがサーバーに送信されることがあります。 そのデータはサーバーによって切り捨てられるかまたは埋め込まれます。 呼び出し側アプリケーションはロールバック要求を出して、切り捨てられたデータまたは埋め込まれたデータを含むデータベース更新を取り消す必要があります。

DB2 JDBC Type 2 ドライバーは、PreparedStatement.setBinaryStreamPreparedStatement.setCharacterStream、または PreparedStatement.setUnicodeStream メソッドが実行した後、例外をスローします。

PreparedStatement.setXXXStream のデフォルト・マッピング

IBM Data Server Driver for JDBC and SQLJ では、PreparedStatement.setBinaryStreamPreparedStatement.setCharacterStream、または PreparedStatement.setUnicodeStream メソッドを使用しており、ターゲット列のデータ・タイプに関する情報を使用できない場合、入力データは BLOB または CLOB データ・タイプにマップされます。

DB2 JDBC Type 2 ドライバーの場合、入力データは VARCHAR FOR BIT DATA または VARCHAR データ・タイプにマップされます。

文字変換における相違点

文字データがクライアントとサーバーとの間で転送される場合、データは受信側が処理できる形式に変換される必要があります。

IBM Data Server Driver for JDBC and SQLJ の場合、データ・ソースからクライアントに送信される文字データは Java の組み込み文字コンバーターを使用して変換されます。 IBM Data Server Driver for JDBC and SQLJ がサポートする変換は、基礎となる JRE インプリメンテーションによってサポートされるものに制限されます。

タイプ 4 接続を使用する IBM Data Server Driver for JDBC and SQLJ クライアントは、データを Unicode UTF-8 としてデータ・ソースに送信します。

DB2 JDBC Type 2 ドライバーでは、文字変換が DB2 サーバーによってサポートされる場合に変換を実行できます。

GRAPHIC 列に 1 バイト文字が含まれる場合 (エラー条件)、DB2 JDBC Type 2 ドライバーはデータ取り出しの際に文字変換を実行します。その際にエラーは発行されませんが、結果が正しくない場合があります。IBM Data Server Driver for JDBC and SQLJ がエラーを発行します。

ASCII データ以外の文字データが getAsciiStream を使用して CLOB 列から取得されると、DB2 JDBC Type 2 ドライバーはデータ取得の際に文字変換を正しく実行します。IBM Data Server Driver for JDBC and SQLJ は、文字変換を正しく実行しません。getAsciiStream を使用するのは、ASCII データを取り出す場合だけにしてください。他のタイプの文字データの場合、getCharacterStream または getString を代わりに使用してください。

これらのドライバーはデータ・ソースからの CCSID 情報を使用します (使用可能な場合)。 ドライバーは入力パラメーター・データを送信する前に、そのデータをデータ・ソースの CCSID に変換します。 ターゲット CCSID 情報が使用不可の場合、ドライバーはデータを Unicode UTF-8 として送信します。

入力パラメーターの暗黙的または明示的データ・タイプ変換

PreparedStatement.setXXX メソッドを実行し、setXXX メソッドから生成されるデータ・タイプがパラメーター値が割り当てられている表列のデータ・タイプに一致しない場合、データ・タイプの変換が行われなければ、ドライバーはエラーを戻します。

IBM Data Server Driver for JDBC and SQLJ では、 ターゲット・データ・タイプが認識されている場合、および deferPreparessendDataAsIs 接続プロパティーが false に設定されている場合に、正しい SQL データ・タイプへの変換が暗黙的に行われます。 この場合、setXXX 呼び出しで暗黙値が明示値をオーバーライドします。 deferPrepares 接続プロパティーまたは sendDataAsIs 接続プロパティーが true に設定されている場合、PreparedStatement.setObject メソッドを使用してパラメーターを正しい SQL データ・タイプに変換する必要があります。

DB2 JDBC Type 2 ドライバーの場合、パラメーターのデータ・タイプがそのデフォルト SQL データ・タイプに一致しなければ、PreparedStatement.setObject メソッドを使用してパラメーターを正しい SQL データ・タイプに変換する必要があります。

入力パラメーターの String から BINARY への変換のサポート

x がタイプ String のオブジェクトの場合、IBM Data Server Driver for JDBC and SQLJ は以下の形式の PreparedStatement.setObject 呼び出しをサポートしません。
setObject(parameterIndex, x, java.sqlTypes.BINARY)

DB2 JDBC Type 2 ドライバーはこのタイプの呼び出しをサポートします。 ドライバーは x の値を 16 進数ストリングと解釈します。

10 進スケールが一致しない PreparedStatement.setObject の結果

IBM Data Server Driver for JDBC and SQLJ の場合、10 進入力パラメーターを指定して PreparedStatement.setObject を呼び出すときに、入力パラメーターのスケールがターゲット列のスケールより大きければ、ドライバーは入力値の末尾桁を切り捨ててからその値を列に割り当てます。

DB2 JDBC Type 2 ドライバーは入力値の末尾桁を丸めてから、その値を列に割り当てます。

ResultSet.getBigDecimal スケール・パラメーターの有効範囲

推奨されない形式の ResultSet.getBigDecimal には、第 2 のパラメーターとして scale パラメーターがあります。IBM Data Server Driver for JDBC and SQLJ では、0 から 32 の範囲のスケール・パラメーターを許可します。

DB2 JDBC Type 2 ドライバーは -1 から 32 の範囲を許可します。

入力パラメーター用の java.lang.Character データ・タイプからの変換のサポート

次の形式の PreparedStatement.setObject の場合、IBM Data Server Driver for JDBC and SQLJx を JDBC データ・タイプに変換する際に、JDBC データ・タイプへの Java™ オブジェクトの標準データ・タイプ・マッピングをサポートします。
setObject(parameterIndex, x)

DB2 JDBC Type 2 ドライバーは 、java.lang.Character から CHAR への x の非標準マッピングをサポートします。

文字列に対する ResultSet.getBinaryStream のサポート

IBM Data Server Driver for JDBC and SQLJ は、文字列に FOR BIT DATA 属性が含まれる場合にのみ、その文字列を表す引数を指定した ResultSet.getBinaryStream をサポートします。

DB2 JDBC Type 2 ドライバーの場合、ResultSet.getBinaryStream 引数が文字列であれば、列には FOR BIT DATA 属性がなくてもかまいません。

バイナリー列に対する ResultSet.getString から戻されるデータ

IBM Data Server Driver for JDBC and SQLJ では、ResultSet.getString をバイナリー列に対して実行する場合、戻されるデータの形式は小文字の 16 進数字の対です。

DB2 JDBC Type 2 ドライバーでは、バイナリー列に対して ResultSet.getString を実行したときに戻されるデータの形式は、大文字の 16 進数字の対です。

Boolean 入力タイプおよび CHAR ターゲット・タイプの setObject を使用した結果

IBM Data Server Driver for JDBC and SQLJ では、PreparedStatement.setObject(parameterIndex,x,CHAR) を実行しており、x がブール値の場合、値 "0" または "1" が表列に挿入されます。

DB2 JDBC Type 2 ドライバーでは、ストリング "false" または "true" が表列に挿入されます。 表列の長さは少なくとも 5 でなければなりません。

getBoolean を使用して CHAR 列から値を取り出した結果

IBM Data Server Driver for JDBC and SQLJ では、ResultSet.getBoolean または CallableStatement.getBoolean を実行して CHAR 列からブール値を取り出すときに、列に値 "false" または "0" が含まれる場合、値 false が戻されます。 列にそれ以外の値が含まれる場合、true が戻されます。

DB2 JDBC Type 2 ドライバーでは、ResultSet.getBoolean または CallableStatement.getBoolean を実行して CHAR 列からブール値を取り出すときに、列に値 "true" または "1" が含まれる場合、値 true が戻されます。 列にそれ以外の値が含まれる場合、false が戻されます。

閉じられたカーソルでの ResultSet.next の実行結果

IBM Data Server Driver for JDBC and SQLJ を使用する場合、ResultSet からすべての行が取得されると、カーソルは自動的に閉じます。カーソルが閉じた後に ResultSet.next を実行すると、SQLException がスローされます。 この動作は、JDBC 標準に準拠します。

DB2 JDBC Type 2 ドライバーを使用する場合、ResultSet からすべての行が取得されても、カーソルは閉じません。すべての行が取得された後に ResultSet.next が実行されると、false の値が戻り、例外はスローされません。

DatabaseMetaData 呼び出しで NULL 引数を指定した結果

IBM Data Server Driver for JDBC and SQLJ では、JDBC 仕様で null が許可されている場合にのみ、DatabaseMetaData メソッド呼び出しで引数に null を指定できます。 そうでない場合、例外がスローされます。

DB2 JDBC Type 2 ドライバーでは、null は、検索を絞り込むために引数を使用しないことを意味します。

CHAR FOR BIT DATA 列または VARCHAR FOR BIT DATA 列の ResultSetMetaData.getColumnTypeName 呼び出しの結果

IBM Data Server Driver for JDBC and SQLJ では、ResultSetMetaData.getColumnTypeName は CHAR FOR BIT DATA 列の CHAR FOR BIT DATA、および VARCHAR FOR BIT DATA 列の VARCHAR FOR BIT DATA を返します。

DB2 JDBC Type 2 Driver では、ResultSetMetaData.getColumnTypeName は CHAR FOR BIT DATA 列の CHAR () FOR BIT DATA、および VARCHAR FOR BIT DATA 列の VARCHAR () FOR BIT DATA を返します。

メソッド引数の大文字への変換

IBM Data Server Driver for JDBC and SQLJ は、メソッド呼び出し内のどの引数も大文字に変換しません。

DB2 JDBC Type 2 ドライバーは、Statement.setCursorName 呼び出しの引数を大文字に変換します。 カーソル名が大文字に変換されないようにするには、カーソル名の前と後に文字 ¥" を付けます。 例:
Statement.setCursorName("¥"mycursor¥"");

タイム・スタンプのエスケープ節のサポート

IBM Data Server Driver for JDBC and SQLJ は、TIME のエスケープ節として、以下の標準形式をサポートします。
{t 'hh:mm:ss'}
標準形式に加えて、DB2 JDBC Type 2 ドライバーは次の形式の TIME エスケープ節をサポートします。
{ts 'hh:mm:ss'}

ステートメント・バッチへの CALL ステートメントの組み込み

IBM Data Server Driver for JDBC and SQLJ は、ステートメント・バッチ内の CALL ステートメントをサポートします。

DB2 JDBC Type 2 ドライバーは、ステートメント・バッチ内の CALL ステートメントをサポートしません。

SQL ステートメント・テキストからの余分な文字の除去

IBM Data Server Driver for JDBC and SQLJ は SQL ステートメント・テキストをデータ・ソースに渡す前に、空白文字 (スペース、タブ、改行文字など) をそのテキストから除去しません。

DB2 JDBC Type 2 ドライバーは、SQL ステートメント・テキストをデータ・ソースに渡す前に、空白文字をそのテキストから除去します。

PreparedStatement.executeBatch を実行した結果

PreparedStatement.executeBatch ステートメントが IBM Data Server Driver for JDBC and SQLJ を使用して実行されると、ドライバーは更新カウントの int 配列を戻します。 配列の各エレメントには、バッチ内のステートメントによって更新された行数が含まれます。

PreparedStatement.executeBatch ステートメントが DB2 JDBC Type 2 ドライバーを使用して実行されると、ドライバーは更新カウントを判別できないため、更新カウントごとに -3 を戻します。

コンパウンド SQL のサポート

IBM Data Server Driver for JDBC and SQLJ ドライバーはコンパウンド SQL ブロックをサポートしません。

コンパウンド SQL は複数の SQL ステートメントを単一の実行可能ブロックにグループ化できるようにします。 以下に例を示します。
EXEC SQL BEGIN COMPOUND ATOMIC STATIC
  UPDATE ACCOUNTS SET ABALANCE = ABALANCE + :delta
    WHERE AID = :aid;
  UPDATE TELLERS SET TBALANCE = TBALANCE + :delta
    WHERE TID = :tid;
  INSERT INTO TELLERS (TID, BID, TBALANCE) VALUES (:i, :branch_id, 0);
  COMMIT;
END COMPOUND;

DB2 JDBC Type 2 ドライバーは、PreparedStatement.executeUpdate または Statement.executeUpdate を使用してコンパウンド SQL ブロックの実行をサポートします。

バッチ更新でパラメーターを設定しない結果

パラメーターが設定されていない場合、IBM Data Server Driver for JDBC and SQLJ ドライバーは PreparedStatement.addBatch 呼び出しの後で例外をスローします。

パラメーターがバッチ内のいずれのステートメントにも設定されていない場合、DB2 JDBC Type 2 ドライバーは PreparedStatement.executeBatch 呼び出しの後で例外をスローします。

アンカタログ・ストアード・プロシージャーを呼び出す機能

IBM Data Server Driver for JDBC and SQLJ ドライバーでは、DB2 カタログで定義されていないストアード・プロシージャーを呼び出すことはできません。

DB2 JDBC Type 2 ドライバーでは、DB2 カタログで定義されていないストアード・プロシージャーを呼び出すことができます。

ストアード・プロシージャー・パラメーターのデータ・タイプの指定

IBM Data Server Driver for JDBC and SQLJ ドライバーでは、データ・ソースが CALL ステートメントの動的実行をサポートしていない場合、ストアード・プロシージャー定義で指定されたとおりに正確に CALL ステートメント・パラメーターを指定する必要があります。

例えば、DB2 for z/OS データ・ソースは CALL ステートメントの動的実行をサポートしません。 DB2 for z/OS サーバー上のストアード・プロシージャーの最初のパラメーターが、CREATE PROCEDURE ステートメントで次のように定義されているとします。
OUT PARM1 DECIMAL(3,0)
呼び出し側アプリケーションでは、cs.registerOutParameter(1, Types.DECIMAL) のようなステートメントは正しくありません。 データ・タイプ cs.registerOutParameter (1, Types.DECIMAL, 0) だけでなくスケールを指定する形式の registerOutParameter メソッドを使用する必要があります。

DB2 JDBC Type 2 ドライバーでは、呼び出しアプリケーションのパラメーター・データ・タイプが CREATE PROCEDURE ステートメントのデータ・タイプと一致している必要はありません。

セミコロンを使用した SQL ステートメントの準備結果

IBM Data Server Driver for JDBC and SQLJ が SQL ステートメントを準備する場合、ステートメントをデータ・サーバーに送信する際、追加処理は何も行いません。そのため、IBM Data Server Driver for JDBC and SQLJ を使用して末尾がセミコロンの SQL ステートメントを準備すると、エラーを受け取ります。

DB2 JDBC Type 2 ドライバーが最後にセミコロンが含まれる SQL ステートメントを準備する場合、そのセミコロンを除去します。そのため、SQL ステートメントに有効な構文が含まれていれば、正常に実行されます。

例えば、以下のコードは IBM Data Server Driver for JDBC and SQLJ では失敗しますが、DB2 JDBC Type 2 ドライバーでは正常に実行されます。

PreparedStatement pstmt1 = con.prepareStatement("SELECT c1,c2 FROM testtab;"); 

Statement オブジェクトまたは PreparedStatement オブジェクトを同時にオープンできる最大数

同時にオープンしたままにできる Statement または PreparedStatement オブジェクトの数は、IBM Data Server Driver for JDBC and SQLJの場合よりも、DB2 Type 2 Driver for Linux, UNIX, and Windows の場合のほうが大きくなります。 IBM Data Server Driver for JDBC and SQLJ においてエラー・コード -805 を受け取ることになるまでにオープンできる Statement または PreparedStatement オブジェクトの数は、DB2 Type 2 Driver for Linux, UNIX, and Windows の場合よりも少なくなります。 この相違は、こうしたオブジェクトの基本リソースをドライバーが処理する方法によって生じます。

推奨: Statement オブジェクトまたは PreparedStatement オブジェクトを使用し終えたなら、それらのオブジェクトをクローズしてください。