0

主キーが自動インクリメントである DB2 データベース テーブルに行を格納しようとしています。これはうまくいきますが、行を正常に挿入した後、さらに処理するために主キーの値を取得する方法に頭を悩ませています。どうやってこれを達成しますか?@JdbcInsert は、挿入された行の量のみを返します ...

4

2 に答える 2

1

SSJS でこれを行う方法はないように思われるので (少なくとも私には)、この特定のロジックを SSJS コントローラーから、JDBC 関連のタスク用に作成した Java ヘルパー Bean に移動しました。Statementは、 ( executeUpdate()メソッドを使用して) 生成されたキーを返すことができます。そのため、@JdbcGetConnection を介して接続を作成しますが、それを Bean に渡します。これは Bean の興味深い部分です。

/**
 * SQL contains the INSERT Statement
 */    
public int executeUpdate(Connection conn, String SQL){

  int returnVal;
  Statement stmt = conn.createStatement();

  stmt.executeUpdate(SQL,
    Statement.RETURN_GENERATED_KEYS);

  if(!conn.getAutoCommit()) conn.commit();

  ResultSet keys = stmt.getGeneratedKeys();

  if(keys.next()){
    returnVal = keys.getInt(1);
  } else {
    returnVal = -1;
  }

  return returnVal;
}

一度に複数の行を挿入する場合は、もちろん、キーの取得処理を変更する必要があります。

于 2013-02-20T18:58:11.760 に答える
0

新しい DB2 バージョンでは、すべての Insert を Select に変換して、自動生成されたキー列を取得できます。例は次のとおりです。

最終テーブルからキーコルを選択 (テーブル (col1, col2) 値 (?,?) に挿入)

keycol は ID 列の名前です

Select は、通常のクエリと同じ @Function で実行できます。

于 2013-04-10T14:11:46.707 に答える