对SELECT语句JDBC的autoCommit = false连接调用commit?

时间:2013-03-27 09:58:42

标签: sql web-applications jdbc transactions commit

我在Tomcat上有一个用Java编写的webapp,默认情况下所有连接都应该是autoCommit=false。现在,如果我只在事务中运行SELECT语句。我还需要拨打commit()还是仅仅关闭连接就足够了?

值得的是:我使用的是Oracle 11.2。

有一个similar question但实际上没有给出这个案例的答案。

2 个答案:

答案 0 :(得分:3)

关闭连接就足够了,无需拨打commitrollback

但根据connection.close(),调用提交或回滚是recommended

答案 1 :(得分:1)

Select语句不会干扰底层模型或模型中包含的数据。关闭连接而不调用与事务相关的任何命令(如commit)是安全的。

实际上打了那个。在我的第一个答案中,我没有考虑过对模型做出的相邻选择。假设您执行select id from users where age > 20并使用select id from users where age = 20进行跟进,这些查询之间所做的任何更新都会影响选择的ACID性质,并在2个查询中返回重复结果。为了保证一致的结果,您需要使用commit()将两个选择包装在同一事务中。

所以是的,提交您的选择是有意义的。