1 回答

TA貢獻1993條經(jīng)驗 獲得超6個贊
您正在循環(huán)的每次迭代中創(chuàng)建一個新的 PreparedStatement。您需要在調(diào)用 executeBatch 的同一個 PreparedStatement 對象上排隊執(zhí)行批處理。目前您只執(zhí)行第 1000 個排隊查詢。
StringBuilder sql = new StringBuilder(
"UPDATE USERS SET\n"
);
sql.append("USER_TYPE=?,\n")
.append("FIRST_NAME=?,\n")
.append("LAST_NAME=?,\n")
.append("EMAIL_ADDRESS=?\n");
sql.append("WHERE USER_ID=?");
preparedStatement = connection.prepareStatement(sql.toString());
for (User user : updatedUsers) {
preparedStatement.setString(1, user.getUserTypeId());
preparedStatement.setString(2, user.getFirstName());
preparedStatement.setString(3, user.getLastName());
preparedStatement.setString(4, user.getEmailAddress());
preparedStatement.setString(5, user.getUserId());
preparedStatement.addBatch();
// Submit in batches of 1000
if (++count % batchSize == 0) {
rowsAffected += IntStream.of(preparedStatement.executeBatch()).sum();
preparedStatement.clearBatch();
}
}
為了確定受影響的行(在 sql server 2005+ 中),您可以在 SQL 中使用 OUTPUT 子句讓數(shù)據(jù)庫返回受影響的行數(shù)據(jù)。文章
添加回答
舉報