0

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

4

1 回答 1

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()

于 2013-10-30T14:51:50.607 回答