Mot*_*sem 10 java mysql jdbc percona
我注意到一些程序员使用COMMIT
其他使用conn.setAutoCommit(true);
来结束事务或回滚所以使用一个而不是另一个有什么好处?
主要区别在哪里?
conn.setAutoCommit(true);
Run Code Online (Sandbox Code Playgroud)
过度
statement.executeQuery(query);
statement.commit();
Run Code Online (Sandbox Code Playgroud)
Mar*_*eel 11
您通常应该使用Connection.commit()
而不是Connection.setAutoCommit(true)
提交事务,除非您想从使用事务切换到autoCommit的'transaction per statement'模型.
也就是说,Connection.setAutoCommit(true)
在事务中调用将提交事务(如果驱动程序符合JDBC 4.1规范的10.1.1节).但是你真的应该这样做,如果你的意思是在那之后继续使用autoCommit,因为在连接上启用/禁用autoCommit可能会比简单提交更高的连接开销(例如,因为它需要在事务管理器之间切换,进行额外的检查等).
您还应该使用Connection.commit()
而不使用本机SQL命令COMMIT
.详见连接文档:
注意:配置Connection时,JDBC应用程序应使用appropritate Connection方法,例如setAutoCommit或setTransactionIsolation.当有可用的JDBC方法时,应用程序不应直接调用SQL命令来更改连接的配置.
事情就是命令喜欢commit()
和setAutoCommit(boolean)
可能在后台做更多工作,比如关闭ResultSets
和关闭或重置Statements
.使用SQL命令COMMIT
将绕过此命令并可能使您的驱动程序/连接进入错误状态.
适用于连接的用法conn.setAutoCommit();
使您可以在单个事务中执行 X 个查询,或者每个事务使用一个事务execute
正如 API 描述的那样:
void setAutoCommit(boolean autoCommit)
throws SQLException
Run Code Online (Sandbox Code Playgroud)
将此连接的自动提交模式设置为给定状态。如果连接处于自动提交模式,则其所有 SQL 语句将作为单独的事务执行和提交。否则,它的 SQL 语句将被分组为事务,这些事务通过调用方法 commit 或方法 rollback 来终止。默认情况下,新连接处于自动提交模式
对于一个简单的情况:
conn.setAutoCommit(false);
statement.executeQuery(query);
statement.commit();
Run Code Online (Sandbox Code Playgroud)
将与以下内容相同:
conn.setAutoCommit(true);
statement.executeQuery(query);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
29452 次 |
最近记录: |