2010-05-10 109 views

回答

9

確實,在幾乎所有JDBC驅動程序實現中關閉Connection也隱含地關閉了Statement。但是,當您使用連接池(並且您想要使用連接池,因爲這大大提高了連接性能)時,將不會關閉Connection,但會將其釋放回池中,因此,當您使用連接池時,會出現一個大的打開Statement。而當你經常這樣做時,遲早你會耗盡資源,這可能會導致你的應用程序被終止。

始終掌握並關閉所有三個資源ConnectionStatement並在最短的範圍ResultSet,沒有任何藉口。

+0

是的,沒有任何東西會教你使用try/finally,而不是在一天的生產中耗盡資源。 – 2010-05-10 21:47:42

+0

由於懶惰的開發人員不理解,你週六工作的人不能重複使用與池連接相同的語句引用(因此不需要使用遊標運行數據庫),所以我希望鼓勵你注意BalusC的話! – Affe 2010-05-10 21:51:35

+0

啊哈!儘管目前我沒有使用連接池(我目前沒有真正需要的),但如果我現在關閉並正確使用所有內容並決定在未來。謝謝! – javanix 2010-05-10 21:57:05

1

將所有樣板代碼移動到輔助方法/類。

通過這種方式,您可以按照與JDBC(或任何其他有限資源包)文檔一致的方式獲取/釋放資源,並且您的業務邏輯不會被JDBC混亂所污染。

雖然現在看起來對您來說可能很浪費,但將單一查詢專用於業務邏輯類中的單個方法沒有任何問題。

+0

您能否詳細說明最後一點? 「將單個查詢專用於業務邏輯類中的單個方法沒有任何問題。」 我想你是在談論某種查詢包裝,但我很好奇你將如何實現一些沒有大量參數的類。 – javanix 2010-05-10 22:03:31

+0

@javanix。從你原來的問題來看,你希望用一種方法運行一些SQL命令,並且關心必要的SQL混亂。最後一段提示您可以使用單一方法來運行設置的單個查詢並關閉JDBC工件。由於我對您的原始發佈的要求一無所知,因此您的情況可能不太實際。另外請記住,巨大的設置或參數可以隱藏在簡單界面的具體實現背後。這就是承載國家信息的類別。 – 2010-05-10 22:38:13