基本上我有(忽略异常处理等):
connection.setAutoCommit(false);
Statement statement1 = connection.createStatement();
statement1.executeUpdate("...");
statement1.close();
Statement statement2 = connection.createStatement();
statement2.executeUpdate("...");
statement2.close();
connection.commit();
Run Code Online (Sandbox Code Playgroud)
如果我理解正确它不应该有任何影响,因为它真正做的就是释放GC的资源.特别是对于Derby:当您不再需要它们时,应该显式关闭Statements,ResultSets和Connections.与Derby的连接是应用程序外部的资源,垃圾收集器不会自动关闭它们.
但是它会导致交易出现任何问题吗?我不相信交易依赖于声明.任何人都可以确认一下吗?
一般来说,一旦Statement执行a,底层数据源/数据库负责确保成功执行.任何失败都会导致在调用SQLException中抛出s Statement.executeXXX.任何成功的执行都会导致数据库在临时工作区中跟踪这些更新.提交事务仅确保由语句引起的更新从临时工作区写入持久存储.在大多数/所有数据库中通常都是这种情况.
因此,Statement一旦您不再需要它就可以安全地关闭它,而不会在事务中遇到任何副作用.
| 归档时间: |
|
| 查看次数: |
10082 次 |
| 最近记录: |