2

これが私のサンプルコード行です

String query = "INSERT INTO tb_product_group values(?,?,?,?,?) ON DUPLICATE KEY UPDATE prg_name = values(prg_name)";
stmtGroups = con.prepareStatement(query,Statement.RETURN_GENERATED_KEYS);
stmtGroups.setInt(index++, java.sql.Types.NULL);
stmtGroups.setString(index++, "");
stmtGroups.setString(index++, str[1]);
stmtGroups.setString(index++, str[2]);
stmtGroups.setInt(index++, oprDto.getId());
System.out.println(stmtGroups);
ResultSet rs = stmtGroups.getGeneratedKeys();
if (rs.next()){
    groupID = rs.getLong(1);
}

(null、 "1"、 "1"、 "1"、1);のようなデータを初めて挿入するとき。新しく生成されたIDを持つgroupIDを取得します。しかし、2回目は、一意のキー制約のためにUPDATEステートメントを起動する同じデータを追加しようとします。その時、私はgroupIDをnullとして取得します。

REPLACE INTO tb_product_group values(?、?、?、?、?)を試しますが、生成されたキーとしてnullを取得します。

4

1 に答える 1

6

試す

INSERT INTO tb_product_group values(?,?,?,?,?) ON DUPLICATE KEY UPDATE
prg_name = values(prg_name), id = last_insert_id(id)

idauto_increment列の名前に置き換えます。

編集:私はこれをJava APIで試したことがないので、別の問題がある可能性があります。

于 2013-03-26T12:27:47.023 に答える