PreparedStatement.executeUpdate メソッドを使用した表のデータの更新

データ・サーバー表を定数値で更新する場合は、Statement.executeUpdate メソッドを使用できます。 ただし、更新するには多くの場合、値を変数に格納して表に渡す必要があります。 その場合に使用できるのが、PreparedStatement.executeUpdate メソッドです。

このタスクについて

また、 IBM® Data Server Driver for JDBC and SQLJPreparedStatement.executeUpdate を使用して、入力パラメータがあり出力パラメータがなく、結果セットを返さないストアドプロシージャを呼び出すこともできます。

Db2 for z/OS® CALL文の動的実行はサポートしていません。 データソース上のストアドプロシージャへの呼び出しの場合、 Db2 for z/OS パラメータには、パラメータマーカーまたはリテラルを使用できますが、式は使用できません。 以下のタイプのリテラルがサポートされています。
  • 整数
  • 二重
  • Decimal
  • 文字
  • 16進法
  • Graphic

IBM Informix® データソース上のストアドプロシージャの呼び出しの場合、 PreparedStatement オブジェクトは、CALL ステートメントまたは EXECUTE PROCEDURE ステートメントにすることができます。

1 つの SQL ステートメントを何度も実行する場合は、 SQL ステートメントを PreparedStatement として作成する方がパフォーマンスが良くなります。

例えば、以下の UPDATE ステートメントでは、従業員表の 1 つの電話番号と 1 つの従業員番号だけを更新します。
UPDATE EMPLOYEE SET PHONENO='4657' WHERE EMPNO='000010'
この操作を一般化して、従業員表の電話番号と従業員番号のあらゆる組み合わせを更新するとしましょう。 その場合は、定数の電話番号と従業員番号を変数に置き換える必要があります。
UPDATE EMPLOYEE SET PHONENO=? WHERE EMPNO=?
この形式の変数のことをパラメーター・マーカーといいます。

プロシージャー

パラメーター・マーカーを指定した SQL ステートメントを実行するには、以下の手順を実行する必要があります。

  1. Connection.prepareStatement メソッドを呼び出して、 PreparedStatement オブジェクトを作成します。
  2. PreparedStatement.setXXX メソッドを呼び出して、入力変数に値を渡します。

    このステップでは、標準パラメーター・マーカーを使用することを想定しています。 あるいは、名前付きパラメータマーカーを使用する場合は、 IBM Data Server Driver for JDBC and SQLJ -入力パラメータに値を渡すにはメソッドのみを使用します。

  3. PreparedStatement.executeUpdate メソッドを呼び出して、変数の値でテーブルを更新します。
  4. PreparedStatement オブジェクトの使用を終えたら、 PreparedStatement.close メソッドを呼び出してオブジェクトを閉じます。

これまでに取り上げた手順を実行して、従業員番号「000010」の従業員の電話番号を「4657」に変更するコードを以下に示します。 選択されたステートメントの右にある番号は、前述のステップに対応しています。
図1: パラメーター・マーカーを指定した SQL ステートメントのために PreparedStatement.executeUpdate を使用する
Connection con;
PreparedStatement pstmt;
int numUpd;
…
pstmt = con.prepareStatement(
  "UPDATE EMPLOYEE SET PHONENO=? WHERE EMPNO=?"); 
                                  // Create a PreparedStatement object        1 
pstmt.setString(1,"4657");        // Assign first value to first parameter    2 
pstmt.setString(2,"000010");      // Assign first value to second parameter 
numUpd = pstmt.executeUpdate();   // Perform first update                     3 
pstmt.setString(1,"4658");        // Assign second value to first parameter   
pstmt.setString(2,"000020");      // Assign second value to second parameter 
numUpd = pstmt.executeUpdate();   // Perform second update                 
pstmt.close();                    // Close the PreparedStatement object       4 

パラメーター・マーカーのないステートメントの場合も、PreparedStatement.executeUpdate メソッドを使用できます。 パラメータマーカーのない PreparedStatement オブジェクトを実行する手順は、パラメータマーカーのある PreparedStatement オブジェクトを実行する手順と似ていますが、 ステップ2 をスキップする点が異なります。 そのための手順を以下の例で示します。

図2: パラメーター・マーカーのない SQL ステートメントのために PreparedStatement.executeUpdate を使用する
Connection con;
PreparedStatement pstmt;
int numUpd;
…
pstmt = con.prepareStatement(
  "UPDATE EMPLOYEE SET PHONENO='4657' WHERE EMPNO='000010'"); 
                                  // Create a PreparedStatement object   1 
numUpd = pstmt.executeUpdate();   // Perform the update                  3 
pstmt.close();                    // Close the PreparedStatement object  4