2011-09-07 68 views
3

我不確定是否Statement和ResultSet應該每次查詢後關閉或已作出後,我所有的問題(即在同一時間,我關閉連接)?JDBC閉幕資源

糾正我,如果我錯了,但我敢肯定,這兩個工作?

然而,將數據庫最終崩潰,如果我沒有每次查詢後關閉語句,然後進行大量的查詢?

在另一方面,那會是低效和浪費時間的,以保持關閉&創建報表,每次查詢?

我已經閱讀了關於這個問題有很多問這個問題之前,但我仍不明朗。任何幫助表示讚賞,

tre。

回答

2

http://www.precisejava.com/javaperf/j2ee/JDBC.htm#JDBC118

儘快使用完的ResultSet 對象的工作,即使Statement對象關閉ResultSet對象 它關閉隱時完成

關閉ResultSet對象時關閉的ResultSet,關閉ResultSet明確地給予機會 垃圾收集器儘可能早地回憶內存,因爲 ResultSet對象可能會佔用大量內存,具體取決於que RY。

概括地說,你不明確地關閉ResultSet對象,但最好這樣做早些時候釋放內存。未能關閉對象只會導致其佔用的內存(可能較小或較大,取決於結果集的大小)被佔用,直到相應的對象關閉。

+0

嗨,非常感謝您的回答。我以前讀過這個,但對此不確定 - 這是否意味着我應該在每次查詢後關閉ResultSet,但只能在執行所有查詢後關閉語句?謝謝。 – tre

+0

@tre我詳細闡述了我的答案。讓我知道你是否需要更多的澄清。 –

+0

它做到了,並且對於要求進一步澄清感到抱歉,但它確實有幫助 - 這是否意味着單個聲明的每個結果集都會保留到聲明結束?非常感謝,豎起大拇指。編輯:我必須等待一分鐘,說這是正確的答案:) – tre

0

這個多少錢重要真的取決於你在做什麼的具體細節。但通常最好關閉結果集(在finally塊中)。從我一直閱讀和看到的所有內容來看,打開連接本身就是性能處罰的地方。

不要想要做的就是打開/關閉連接非常快(這就是爲什麼許多應用程序和服務器實現連接池)。

+0

非常感謝這真的,真的幫助 - 非常快速地打開/關閉連接正是我正在用我當前的代碼正在做的事情,所以現在我知道我絕對不應該這樣做。但是,在每個查詢後打開/關閉語句怎麼樣 - 這是否也是不好的和不必要的? – tre

+0

我懷疑關閉並重新創建聲明會有很大的傷害,但如果我一次只做幾個查詢,我就不會關閉聲明。 – Manius