2010-08-30 34 views
3

我正在開發一個帶有MySQL數據庫的Java SE應用程序。它使用大小爲10的連接池,因爲有很多屏幕。每個屏幕都有一個線程,每10秒鐘更新一些JTable。我的連接池代碼取自http://java.sun.com/developer/onlineTraining/Programming/JDCBook/conpool.html,爲了方便我自己添加了一些方法。連接池查詢結果在實時數據和舊數據之間跳轉?

我的問題是,當我編輯應用程序中的一些數據並將其保存回數據庫時,每當線程運行時,JTable將隨機顯示新更新的數據或舊的原始數據更新屏幕。它會在新舊之間來回閃爍,每次線程都會循環。

我也有一些對象,我通過單擊JTable中的一行來加載,並在文本框中顯示它們的詳細信息。如果我點擊上面存在問題的數據,那麼加載的對象也會顯示相同的「舊」值。 (儘管對象從數據庫池中獲得了一個新的,不同的連接來加載它的值)

當JTable再次刷新並顯示正確的「更新」數據 - 並且我加載對象時,對象也顯示正確的數據。

這是我使用的數據庫連接池庫的問題,有沒有更好的選擇?我試過用SQL_NO_CACHE運行我所有的刷新代碼,但這沒有效果。我是新來的,請告訴我是否有任何我從細節中遺失的東西,謝謝!

回答

0

嘗試改變你的連接的隔離級別:

connection.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED); 

此外,還要確保你正確地處理您的交易,否則你可能有隨機的問題幻讀!

編輯:爲了在連接之間建立正確的隔離,您需要禁用事務中的自動提交和環繞寫入操作。如果您不這樣做,則在寫入過程中可能會發生另一連接的讀取,並且可能會返回不一致的數據。

+0

這個技巧!謝謝。你能否通過「正確處理你的交易」來解釋一下你的意思? – skeletorhig 2010-08-30 23:56:54