我已经注意到使用一些程序员COMMIT
其他使用conn.setAutoCommit(true);
结束事务或回滚那么,什么是使用一个,而不是其他的好处?
其中的主要区别?
conn.setAutoCommit(true);
过度
statement.executeQuery(query);
statement.commit();
我已经注意到使用一些程序员COMMIT
其他使用conn.setAutoCommit(true);
结束事务或回滚那么,什么是使用一个,而不是其他的好处?
其中的主要区别?
conn.setAutoCommit(true);
过度
statement.executeQuery(query);
statement.commit();
你应该在一般使用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
将绕过这和潜在的把你的驱动器/连接到不正确的状态。
的使用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);