在Derby(JDBC)中提交之前,我可以关闭事务中的语句吗?

Ste*_*ier 16 java

基本上我有(忽略异常处理等):

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的连接是应用程序外部的资源,垃圾收集器不会自动关闭它们.

但是它会导致交易出现任何问题吗?我不相信交易依赖于声明.任何人都可以确认一下吗?

勿绮语*_*勿绮语 20

当然,你可以关闭它们,你应该这样做.


Vin*_*lds 7

一般来说,一旦Statement执行a,底层数据源/数据库负责确保成功执行.任何失败都会导致在调用SQLException中抛出s Statement.executeXXX.任何成功的执行都会导致数据库在临时工作区中跟踪这些更新.提交事务仅确保由语句引起的更新从临时工作区写入持久存储.在大多数/所有数据库中通常都是这种情况.

因此,Statement一旦您不再需要它就可以安全地关闭它,而不会在事务中遇到任何副作用.