SQL select未被提交导致缓存

时间:2013-10-29 21:00:18

标签: java mysql tomcat jdbc

我正在使用Tomcat和一个带有mysql数据库的JDBC连接池。创建java.sql.Connection并设置#setAutoCommit(false),并且在没有提交的情况下执行select语句,然后关闭连接时,它似乎将缓存的连接返回到池。之后创建的相同选择的子后端连接将从数据库返回过时数据。这种行为似乎很奇怪,因为我被迫提交仅执行选择的会话,否则我看不到另一个节点反映的更改。有没有解决这种行为的方法,或者我是否必须提交每个选择?

1 个答案:

答案 0 :(得分:0)

问题在于如何为连接API定义合同。 commit [1]和rollback [2]方法是在数据库上释放锁的时候。由于我在选择后没有提交或回滚,因此在将连接返回到池时会保持这些锁。因此,必须在执行选择后提交或回滚,以便释放连接中保持的锁。

[1] http://docs.oracle.com/javase/7/docs/api/java/sql/Connection.html#commit() [2] http://docs.oracle.com/javase/7/docs/api/java/sql/Connection.html#rollback()