【发布时间】:2013-01-31 12:04:29
【问题描述】:
我正在使用 JDBC,自动提交=true。在其中一项操作中,我正在使用准备好的语句进行批量插入。
public void executeBatchInsert(String query, List<Object[]> entityList) {
try {
pstmt = conn.prepareStatement(query);
for(int i=0; i<entityList.size(); i++) {
int j=1;
for(Object o: entityList.get(i)) {
pstmt.setObject(j++, formatColumnValue(o));
}
pstmt.addBatch();
if((i+1)%1000 == 0) {
pstmt.executeBatch();
}
}
pstmt.executeBatch();
} catch (SQLException e) {
}
}
如果我在执行时遇到异常,当我关闭这个连接时,是否会释放所有的锁并进行回滚?
-- B. 光辉。
【问题讨论】:
-
使用
autoCommit=true进行批处理的行为(明确地!)未在 JDBC 规范中定义。一般来说,您根本不应该在不禁用autoCommit的情况下使用批处理执行。 -
仅供参考...关于Comment by Mark Rotteveel,这一点记录在JDBC™ 4.3 Specification 的第14.1.1 节中:
executeBatch的提交行为总是在发生错误时由实现定义并且自动提交是true。
标签: java jdbc prepared-statement