2012-03-12 86 views
1

雖然已經討論了很多次,但可以在最短範圍內關閉數據庫資源。我想知道是否可以重用聲明對象,它不返回任何結果集。 forexample這樣的代碼,對於非結果集結果查詢重複使用語句

Statement st = con.getStatement(); 
st.execute(TABLE1_DELETE_Query); 
st.execute(TABLE2_DELETE_Query); 
st.close(); 

我看着SF類似的問題,但我無法找到可以回答我的。如果已經回答,請只提及參考。

感謝

+1

作爲一般性評論,我建議使用'PreparedStatement'而不是'Statement'。 – nwinkler 2012-03-12 10:41:27

+0

謝謝,我想知道在非結果集結果場景中重複使用語句對象。 – nomi 2012-03-12 11:17:18

+0

是的,您可以多次重複使用Statement對象,只要它與Connection對象初始化到的相同數據庫進行交易即可。 – Rakesh 2012-03-12 11:25:05

回答

3

報表的壽命應保持短期的,而是重新使用它們是完全沒有問題。

單個未關閉的ResultSet可能會導致應用程序掛起,但您可以有幾百個未關閉的語句沒有問題。通常情況下,一條語句將保存與數據庫連接相關的一小段內存,而其他的則很少,但它可以保存getMoreResults()方法可能返回的多個結果集,以及getWarnings()方法的警告。

在單個方法中多次重複使用Statement,然後關閉它是很好的做法,因爲它可以節省不必要的額外語句。創建一個聲明,並掛在它以防萬一它是通緝令是不好的做法。

PreparedStatements旨在重複使用,但仍然最好將它們保持在單一方法的範圍內,因爲這可以確保它們具有短期壽命。

+0

只需要多一點清除。你是否暗示,即使在較短的範圍內,我們也可以重複使用返回結果集的語句,只要我們繼續關閉結果集。或者當語句剛剛返回一個布爾值或非結果集時。 – nomi 2012-03-12 12:30:59

+0

如果結果集關閉,您確實可以重用返回結果集的語句。理想情況下,語句和結果集應該由Java 7的try-with-resources結構來處理,這將確保它們始終關閉。如果這不是一個選項,請確保您有一個finally子句,它可以關閉它們並處理來自close的任何異常,而不會屏蔽任何先前的異常。 – 2012-03-12 12:48:26