对于insert语句,我使用JDBC addBatch和batchExecute。我要启动自动提交模式。我的问题是,例如,当我有20个插入,而插入号10引发异常(例如,不允许空值)时,就不会插入任何数据。不应该先插入10条ok语句吗?
我的代码:
try {
int[] results = stmt.executeBatch();
return results;
} catch (BatchUpdateException e) {
int[] tmpres = e.getUpdateCounts();
for (i = 0; i < tmpres.length; i++) {
System.out.println(tmpres[i]);
}
}我在输出中看到前10条语句的更新计数为1,那么为什么没有插入数据呢?
向你问好,彼得
发布于 2015-12-06 14:16:37
对这一问题的其他答复有些误导,至少在一般情况下是如此。
在大多数情况下,当将executeBatch()与setAutoCommit(true)一起使用时
对于MySQL连接器/J(使用默认的rewriteBatchedStatements=false )、Microsoft驱动程序、Derby和HSQLDB,这是绝对正确的。(我只是运行实际的Java代码来确认。)
与JDBC的许多其他方面一样,在特定情况下的实际行为取决于您正在使用的JDBC驱动程序的具体实现。
发布于 2015-12-06 09:37:38
在您的配置中,一个批处理中的所有语句实际上都是在one事务中执行的。因此,如果任何插入失败,整个事务(即整个批处理)将被回滚。即使是自动提交。
发布于 2015-12-06 09:42:49
在本例中,所有语句都包含在同一个事务中,因此任何将导致错误的语句都将回滚整个事务。
https://stackoverflow.com/questions/34115819
复制相似问题