DB2 Version 9.7 for Linux, UNIX, and Windows

PreparedStatement オブジェクトでの名前付きパラメーター・マーカーの使用

PreparedStatement オブジェクトで標準のパラメーター・マーカーの代わりに名前付きパラメーター・マーカーを使用して、パラメーター・マーカーに値を割り当てることができます。

名前付きパラメーターを使用するアプリケーションが正しく動作するようにするには、データ・サーバーのタイプとバージョンに関係なく、ご使用のアプリケーションで名前付きパラメーター・マーカーを使用する前に、Connection または DataSource プロパティーの enableNamedParameterMarkers を DB2BaseDataSource.YES に設定します。

名前付きパラメーター・マーカーを PreparedStatement オブジェクトで使用するには、以下の手順に従います。

  1. 名前付きパラメーター・マーカーを含む SQL ステートメント・ストリングに対して Connection.prepareStatement メソッドを実行します。 名前付きパラメーター・マーカーは、SQL ホスト変数名の規則に従う必要があります。

    同じ SQL ステートメント・ストリングの中で名前付きパラメーター・マーカーと標準のパラメーター・マーカーを混用することはできません。

    名前付きパラメーター・マーカーは大/小文字を区別しません。

  2. それぞれの名前付きパラメーター・マーカーに対して DB2PreparedStatement.setJccXXXAtName メソッドを使用して、それぞれの名前付き入力パラメーターに値を割り当てます。

    同じ SQL ステートメント・ストリング内で同じ名前付きパラメーター・マーカーを複数回にわたって使用する場合、そのパラメーター・マーカーに対する setJccXXXAtName メソッドを一度だけ呼び出す必要があります。

    推奨: パラメーター・マーカーへの入力がストリームである場合には、同じ SQL ステートメント・ストリング内でその同じ名前付きパラメーター・マーカーを複数回にわたって使用しないでください。 予期しない結果が発生する可能性があります。
    制約事項: 標準の JDBC PreparedStatement.setXXX メソッドを名前付きパラメーター・マーカーで使用することはできません。 これが原因で例外がスローされます。
  3. PreparedStatement を実行します。

以下のコードでは、名前付きパラメーター・マーカーを使用して、従業員番号「000010」の従業員の電話番号を「4657」に更新します。 選択されたステートメントの右にある番号は、以前に説明されたステップに対応しています。

Connection con;
PreparedStatement pstmt;
int numUpd;
…
pstmt = con.prepareStatement(
  "UPDATE EMPLOYEE SET PHONENO=:phonenum WHERE EMPNO=:empnum"); 
                                  // Create a PreparedStatement object     1 
((com.ibm.db2.jcc.DB2PreparedStatement)pstmt).setJccStringAtName
  ("phonenum", "4567");
                                  // Assign a value to phonenum parameter  2 
((com.ibm.db2.jcc.DB2PreparedStatement)pstmt).setJccStringAtName
  ("empnum", "000010");
                                  // Assign a value to empnum parameter
numUpd = pstmt.executeUpdate();   // Perform the update                    3 
pstmt.close();                    // Close the PreparedStatement object    

以下のコードでは、名前付きパラメーター・マーカーを使用して、PL/SQL ブロックの値を更新します。 選択されたステートメントの右にある番号は、以前に説明されたステップに対応しています。

Connection con;
PreparedStatement pstmt;
int numUpd;
…
String sql =
  "BEGIN " +
  "  UPDATE EMPLOYEE SET PHONENO = :phonenum WHERE EMPNO = :empnum; " +
  "END;";
pstmt = con.prepareStatement(sql); // Create a PreparedStatement object     1 
((com.ibm.db2.jcc.DB2PreparedStatement)pstmt).setJccStringAtName
  ("phonenum", "4567");
                                   // Assign a value to phonenum parameter  2 
((com.ibm.db2.jcc.DB2PreparedStatement)pstmt).setJccStringAtName
  ("empnum", "000010");
                                   // Assign a value to empnum parameter
numUpd = pstmt.executeUpdate();    // Perform the update                    3 
pstmt.close();                     // Close the PreparedStatement object