Prepare Statement执行批处理方法在数据库中插入单个记录

时间:2014-12-11 11:34:13

标签: java jdbc

准备语句仅更新我们通过循环设置的第一个条目,其余的不会插入到数据库中。

String INSERT_INTO_XYZ="Insert into xyz(col1,col2,col3) values(?, ?, ?)";

PreparedStatement pstmt = conn.prepareStatement(INSERT_INTO_XYZ);
int i = 10;
for(int employeeId : employeeIds)
{
    pstmt.setInt(1, i++);
    pstmt.setInt(2, group);
    pstmt.setInt(3, employeeId);
    pstmt.addBatch();
    pstmt.clearParameters();
}
pstmt.executeBatch();
conn.commit();

2 个答案:

答案 0 :(得分:0)

executeBatch()应该在for循环之外。

addBatch()用于向批处理添加单个语句。 executeBatch()用于开始执行组合在一起的所有语句。

for(int employeeId : employeeIds) {
    pstmt.setInt(1, i++);
    pstmt.setInt(2, group);
    pstmt.setInt(3, employeeId);
    pstmt.addBatch();
    pstmt.clearParameters();
}
pstmt.executeBatch();
pstmt.close();

答案 1 :(得分:0)

您的代码看起来是正确的。您不应该要求清除参数,因为组不在循环中更改,您可以在循环外设置它。只有在conn.setAutoCommit为false时才需要提交。我认为是这种情况,但你不要在你的代码中显示。