我正在使用Tomcat和JDBC連接池以及mysql數據庫。當創建java.sql.Connection並設置了#setAutoCommit(false),並且在沒有提交的情況下執行select語句,然後關閉連接時,它似乎將緩存的連接返回到池。之後創建的後續連接將執行相同的選擇,並返回數據庫中的陳舊數據。這種行爲似乎很奇怪,因爲我被強制提交只執行選擇的會話,否則我看不到其他節點反映的更改。有沒有解決此問題的方法,還是必須提交每個選擇?SQL選擇不提交緩存中的結果
0
A
回答
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()
相關問題
- 1. SQL表單提交結果
- 2. Memcached/XCache緩存SQL結果?
- 3. 緩存linq-to-sql結果?
- 4. 緩存SQL結果集
- 5. PHP&PostgreSQL緩存sql結果
- 6. 我如何選擇沒有緩存在rails中的結果集
- 7. 清除之前在新AJAX中選擇的jQuery中的緩存選項提交
- 8. 存在不同的選擇結果?
- 9. 結果SQL請求選擇
- 10. 選擇結果與SQL
- 11. 在SQL結果中選擇的行
- 12. Backbone.js的提取結果緩存
- 13. 選擇性緩存存儲庫對象或數據結果
- 14. SQL調用的緩存結果
- 15. 緩存結果()
- 16. Tools.pingdom.com是否提供緩存或無緩存的速度結果?
- 17. JQuery提交選擇字段上的更改,ajax結果
- 18. sql服務器將選擇的結果存儲在變量中?
- 19. 選擇不提交onchange
- 20. RDBMS是否提供結果緩存?
- 21. 選擇結果的選擇
- 22. SQL CLR標量函數緩存結果
- 23. 是否SQL語句緩存結果
- 24. 如何緩存LINQ to SQL結果?
- 25. 在SQL Server緩存查詢結果Asyncronuosly
- 26. 從結果集中選擇(單擊非SQL選擇)特定結果
- 27. 如何將緩存中的sql查詢結果保存到另一個緩存
- 28. 從EF中緩存結果
- 29. 更改選擇提交表單,但忽略結果 - jquery/php
- 30. SQL - 如果OLEQuery中存在選擇列
能否請您發佈一些代碼? – Zeus
在Tomcat連接池配置中將'rollbackOnReturn'或'commitOnReturn'屬性設置爲true,請參閱以下鏈接:http://tomcat.apache.org/tomcat-7.0-doc/jdbc-pool.html#Tomcat_JDBC_Enhanced_Attributes。如果autocommit爲false,則您必須**明確提交或回滾事務。 – krokodilko
問題是,爲什麼我**沒有對底層數據庫進行任何更改時提交**。這種行爲似乎很奇怪。人們會期望在連接上調用.close(),這將是你將這個連接釋放到數據庫所必須做的所有事情。 – cole