2012-07-20 99 views
1

我很想深入瞭解ResultSet的工作。 我對ResultSet有很多疑問。 如表現明智哪一個更好。ResultSet的工作原理

while(rs.next()) 
{ 
    // iterate as well as do call some other functions. 
} 
    or 
while(rs.next()) 
{ 
// iterate and store the column values in a map 
} 
// do functions using the map. 

由於該表被許多其他併發程序訪問。

+0

這兩個解決方案都是等效的,以防止併發訪問使用事務。 – triclosan 2012-07-20 13:35:33

+0

第二個不適合大的結果集,它可能會耗盡內存 – 2012-07-20 13:42:12

回答

1

它將取決於很多因素。

  • 加工密集程度如何是您的「其他功能」。如果處理是最小的,那麼它並不重要,但它涉及很多CPU使用,然後延遲處理,直到結果集關閉,這應該會提高事務性能。
  • 結果集有多大?如果它相當小,然後將它讀入一個Map很好,但是如果它的大小和你的處理將把它處理成一個更小的形式,那麼你可能會更好地在循環內進行處理。

看看免費的VisualVM中的CPU和內存分析,或者使用一些基本的時序來了解發生了什麼。

+0

。它平均包含800條記錄,將來會增加。 – JackAss 2012-07-21 05:48:05

+0

謝謝你的回覆。我也想知道這個循環時間內的計算(如果需要一些時間)會影響其他人訪問同一個表嗎? – JackAss 2012-07-21 05:48:17

1

要做的最好的事情是,通常遵循的標準是將所有值存儲到對象中,然後返回該對象。這只不過是一個數據傳輸對象(DTO設計模式)。

在第一種情況下,你正在做的一樣

  1. 建立與數據庫的連接。
  2. 執行一些SQL語句,然後通過獲取結果集。
  3. 並迭代ResultSet, 在此步驟中:您將調用一些其他函數,但我們不知道需要多少時間才能完成。

    主要缺點是持續連接對象長時間不好,因爲它可能是其他用戶需要的,當然這是最昂貴的。