除非要从使用事务切换到autoCommit的“每个语句的事务”模型,否则通常应该使用
Connection.commit()而不是
Connection.setAutoCommit(true)提交事务。
也就是说,
Connection.setAutoCommit(true)在事务中调用将提交事务(如果驱动程序符合JDBC
4.1规范的10.1.1节)。但是,实际上,只有在此后才打算保留autoCommit的情况下,才应该这样做,因为在连接上启用/禁用autoCommit可能会比单纯地提交(例如,因为它需要在事务管理器之间进行切换,请执行其他检查)在连接上具有更高的开销。等)。
您还应该使用
Connection.commit()而不是使用本机SQL命令
COMMIT。如连接文档中所述:
注意:配置连接时,JDBC应用程序应使用适当的连接方法,例如setAutoCommit或setTransactionIsolation。如果有JDBC方法可用,则应用程序不应直接调用SQL命令来更改连接的配置。
事情是这样的命令
commit(),并
setAutoCommit(boolean)可以做更多的工作,在回地面,如关闭
ResultSets和关闭或重置
Statements。使用SQL命令
COMMIT将绕过此操作,并可能使驱动程序/连接进入错误状态。



