2012-08-09 36 views
0

我正在構建與MYSQL數據庫進行對話的Java Web應用程序。當請求進入時,有幾件事情必須完成。Java JDBC返回來自不同調用的重複結果集

首先,我必須驗證一些數據。爲此,我有一個靜態方法獲取一些數據並驗證它是否準確。此驗證過程的一部分需要我使用返回ResultSet

即網絡應用的另一個靜態方法來查詢數據庫調用驗證(字符串數據)調用queryData()

當我做到這一點運行良好。

現在,在調用數據之後,我調用另一個靜態函數來將一些數據插入到數據庫中。這個插入函數調用(有時但並非總是)完全相同的queryData函數來獲取數據。

即web應用程序調用insertData(data),它調用queryData()。 所以程序流程如下

Webapp 
|----> Validate() 
      |-------->queryData() 
      <-----------| 
<---------| 
| 
|------>insertData() 
      |-------->queryData() 
      <-----------| 
<---------| 

我詢問與PreparedStatement的是本地的queryData方法

正如我所說的,驗證方法工作正常,但是當涉及到定義數據庫插入方法應用程序崩潰。

我已經仔細檢查過兩種情況下SQL語句是否相同,我甚至已經打印出結果集的內存位置,並且它們位於不同的地方。但是,當我打印出結果集的isBeforeFirst()時,它在驗證方法中是true,而在insert方法中是false。

看起來JDBC正在返回ResultSet的副本(它保存在不同的內存位置),但實際上並沒有創建一個新的ResultSet,它將位於第一行之前。

簡單的解決方案是簡單地返回resultSet到第一次,但這並不能解決問題。它仍然說結果集不在第一個之前。

有沒有人知道爲什麼會發生這種情況?

+4

如果你從你的應用程序發佈了一些相關的代碼,這將有所幫助。 – 2012-08-09 16:58:23

+0

這些靜態方法會使用任何可變數據嗎? – 2012-08-09 17:56:32

+0

是的數據是可變的,但是數據之間的數據沒有被修改以驗證和插入。 – 2012-08-09 18:05:53

回答

0

愚蠢的我,我找到了原因。在調用queryData函數之前,我實際上正在修改數據,以便查詢函數的結果將返回一個空集。在我調用queryData之後,應用程序將嘗試讀取數據,導致SQLException並在我修改任何內容之前回滾數據庫,所以我從來沒有看到任何查詢之間的差異。

謝謝大家誰試圖幫助。