for (int i = 0; i < useridArr.length; i++) {
DbUtil.executeUpdate(
conn, Mysql.insert_announcement,
new Object[]{
useridArr[i], companyid, msg, announcerid, 0, 1,
new java.util.Date().getTime()
});
}
现在,我想避免这种循环,请告诉我我需要做什么?
答案 0 :(得分:2)
现在,循环将为给定数组useridArr
中的每个用户id执行一个insert语句。从您的问题中不清楚为什么需要更改此信息
我会假设你想提高表现。这样做的方法是使用批量插入而不是多次插入。
无论如何,你需要遍历用户id来初始化语句值,即使它将执行一次。
您可以在DbUtil
中添加新帮助程序(添加异常处理并根据需要返回)
public class DbUtil {
public static void executeBatchUpdate(Connection con,
String stmt
List<Object[]> data) {
PreparedStatement p = con.prepareStatement(stmt);
for (Object[] rowData : data) {
for (int i = 0; i < rowData.length; i++) {
p.setObject(i+1, rowData[i]);
}
p.addBatch();
}
int[] results = p.executeBatch();
// check results
// handle exceptions
// return something if needed
}
}
在像
这样的循环中构建List<Object[]>
List<Object[]> data = new ArrayList<>(useridArr.length);
for (int i = 0; i < useridArr.length; i++) {
data.add(new Object[]{
useridArr[i], companyid, msg, announcerid, 0, 1,
new java.util.Date().getTime()
});
}
您还可以使用更专业的批量插入方法,直接获取值,准备批处理并执行它,而无需构建行Object[]
的中间列表。