Java addBatch()与自动提交一起使用=true

Java addBatch()与自动提交一起使用=true,java,jdbc,Java,Jdbc,我的情况是这样的: con.setAutoCommit(true); Statement stmt = con.createStatement(); stmt.addBatch(query);//add all the queries stmt.executeBatch(); 每个查询是单独提交还是整个批处理只提交一次 注意:数据库是Oracle 11,来自: 创建连接时,它处于自动提交模式这意味着每个SQL语句都被视为一个事务,并在执行后立即自动提交。(更准确地说,默认情况是SQL语句在完成

我的情况是这样的:

con.setAutoCommit(true);
Statement stmt = con.createStatement();
stmt.addBatch(query);//add all the queries
stmt.executeBatch();
每个查询是单独提交还是整个批处理只提交一次

注意:数据库是Oracle 11,来自:

创建连接时,它处于自动提交模式这意味着每个SQL语句都被视为一个事务,并在执行后立即自动提交。(更准确地说,默认情况是SQL语句在完成时提交,而不是在执行时提交。当检索到其所有结果集和更新计数时,语句完成。但是,在几乎所有情况下,语句在执行后立即完成并提交。)


因此,您将在每个查询后获得提交。

每个查询都将提交,对于单个提交,请关闭自动提交和executeBatch()后提交


根据JDBC规范,启用自动提交的批处理执行的确切行为是由实现定义的。因此,它取决于数据库及其驱动程序,在使用批处理执行时,最好不要对确切行为进行假设并禁用自动提交

JDBC 4.1第14.1.1节规定:

当发生错误且自动提交为true时,
executeBatch
的提交行为始终由实现定义


这只是说明了错误条件的行为,但其含义是,当批处理中的另一个语句引发异常时,可能已经提交了单个语句。

如果要使用批处理,为什么要使用自动提交?@Kayaman:这是一个遗留代码。
con.setAutoCommit(false);
Statement stmt = con.createStatement();
stmt.addBatch(query);//add all the queries
stmt.executeBatch();
con.commit();