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。但是第二次我尝试添加由于唯一键约束而触发 UPDATE 语句的相同数据。那时我将 groupID 设为空。

我尝试 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)

替换id为您的 auto_increment 列的名称。

编辑:我没有用java api尝试过这个,所以可能还有另一个问题。

于 2013-03-26T12:27:47.023 回答