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