这是我的示例代码行

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。
但在第二次尝试添加相同的数据时,由于唯一的键约束而触发UPDATE语句。那一次我得到的groupID为空。
我尝试替换成tbu产品组值(?)?,?,?,?,?) 但也可以作为generatedKeys获得null。

最佳答案

尝试

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

用自动递增列的名称替换id
编辑:我还没有用java api尝试过,所以可能还有另一个问题。

08-16 13:05