jdbc:setAutoCommit(true) 是否提交过去的执行?

Ada*_*tan 2 jdbc transaction errors auto-commit

我想执行一些语句,并在最后提交整个批处理。我尝试了以下方法:

connection.setAutoCommit(false);            // Don't commit for each statement
int[] returnCodes = pstmt.executeBatch();   // Execute all statements
connection.setAutoCommit(true);             // Back to normal state - future statements
                                            // will be committed instantly
connection.commit();                        // Commit our batch
Run Code Online (Sandbox Code Playgroud)

哪个失败了:

java.sql.SQLException: Can't call commit when autocommit=true
--reference to the line with connection.commit()--
Run Code Online (Sandbox Code Playgroud)

正确的做法是什么?是否connection.setAutoCommit(true)提交所有已执行的批处理语句?

Mat*_*Mat 6

Connection.setAutoCommit文档:

注意:如果在事务期间调用此方法并且更改了自动提交模式,则提交事务。如果调用 setAutoCommit 并且自动提交模式未更改,则调用为空操作。

但我不认为它在您的代码中非常易读/显而易见。您可能应该在切换回自动提交模式之前简单地提交。使意图明确。