提交或conn.setAutoCommit(真)(COMMIT OR conn.setAutoCom

2019-06-24 04:45发布

我已经注意到使用一些程序员COMMIT其他使用conn.setAutoCommit(true); 结束事务或回滚那么,什么是使用一个,而不是其他的好处?

其中的主要区别?

conn.setAutoCommit(true);

过度

statement.executeQuery(query);
statement.commit();

Answer 1:

你应该在一般使用Connection.commit()而不是Connection.setAutoCommit(true)提交事务,除非你想使用事务自动提交的“每个语句事务”的模式切换。

这就是说,调用Connection.setAutoCommit(true) ,同时在交易将提交事务(如果司机是符合JDBC 4.1规范的10.1.1节)。 但是,你真的应该永远只能做,如果你的意思是要留在自动提交后,作为启动/连接上禁用自动提交可能比仅仅保证(例如,因为它需要的事务管理器之间切换的连接上更高的开销,做其他检查等)。

您还应该使用Connection.commit()而不是使用本地SQL命令COMMIT 。 至于详细的连接的文件中:

注意:在配置连接,JDBC应用程序应该使用适当的连接方法,比如setAutoCommit或setTransactionIsolation。 应用程序不应该直接调用SQL命令更改连接的配置,当有可用的JDBC方法。

问题是,命令喜欢commit()setAutoCommit(boolean)回地面可以做更多的工作,如关闭ResultSets和关闭或重置Statements 。 使用SQL命令COMMIT将绕过这和潜在的把你的驱动器/连接到不正确的状态。



Answer 2:

的使用conn.setAutoCommit(); 适用于连接,让您在一个事务中执行X的查询,或使用每单交易的可能性execute

由于API描述:

 void setAutoCommit(boolean autoCommit)
                    throws SQLException

将此连接的自动提交模式设置为给定状态。 如果连接是在自动提交模式,那么它的所有SQL语句将被执行并作为单个事务。 否则,它的SQL语句被分为由呼叫终止任一方法事务提交或回滚方法。 默认情况下,新的连接处于自动提交模式

对于一个简单的例子:

conn.setAutoCommit(false); 
statement.executeQuery(query); 
statement.commit();

将是一样的:

conn.setAutoCommit(true); 
statement.executeQuery(query);


文章来源: COMMIT OR conn.setAutoCommit(true)