当我尝试在netezza上执行executeBatch()时出现错误。以下是错误:
org.netezza.error.NzSQLException:错误:更新已取消:尝试使用多个连接行中的值更新目标行。
请查看以下代码:
String updateDim = "UPDATE DIM_DETAILS set c1 = ? where rep_id = 185 and ar_id = ? and pe_id = ? and se_id = ? and by_id = ?";
stmt3 = conn.prepareStatement(updateDim);
for (Dim dim : updatedDimList ){
upcount += 1;
opvalue = BeanUtils.getProperty(dim, dimName.toLowerCase());
stmt3.setString(1, opvalue);
stmt3.setString(2, dim.getAr_id());
stmt3.setString(3, dim.getPe_id());
stmt3.setString(4, dim.getSe_id());
stmt3.setString(5, dim.getBy_id());
stmt3.addBatch();
//stmt3.executeUpdate();
//System.out.println("Successfully Updated Rows: "+upcount);
}
int[] recordsAffected = stmt3.executeBatch();
conn.commit();
答案 0 :(得分:0)
似乎您尝试多次更新多行,因为可能存在重复的行。请尝试删除此类重复项。
Set<String> keys = new HashSet<String>();
//inside the loop
if(keys.contains(dim.getAr_id() + "#" + dim.getPe_id() + "#" + dim.getCe_id()))
continue;
else
keys.add(dim.getAr_id() + "#" + dim.getPe_id() + "#" + dim.getCe_id());