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

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

connection.setAutoCommit(false); Statement statement1 = connection.createStatement(); statement1.executeUpdate("..."); statement1.close(); Statement statement2 = connection.createStatement(); statement2.executeUpdate("..."); statement2.close(); connection.commit(); 

如果我理解正确它不应该有任何影响,因为它真正做的就是释放GC的资源。 特别是对于Derby :当您不再需要它们时,应该显式关闭语句,结果集和连接。 与Derby的连接是应用程序外部的资源,垃圾收集器不会自动关闭它们。

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

当然,你可以关闭它们,你应该。

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

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

当然,在提交事务之前关闭语句是安全的。 在从coderanch和JDBC Transactions 教程 提交之前,您必须阅读Closing Statement对象 。

对。 在提交交易之前,这是一个很好的做法和方法来关闭声明。