2012-05-17 30 views
3

我的問題對於這樣的說法:在哪些情況下SQL語句對象是否自動關閉?

釋放此Statement對象的數據庫和JDBC資源,而不是等待時,自動關閉這種情況發生。 http://docs.oracle.com/javase/6/docs/api/java/sql/Statement.html#close%28%29

那麼,在哪種情況下Statement對象會自動關閉?

+1

確保您儘快關閉任何Statement(或ResultSet)**,因爲您不再需要它了。不要依賴任何隱含的清理這些東西。 –

回答

4

對於JDBC 4.0和早期(爪哇6或更早):

  • 當連接被關閉
  • 一條語句關閉

JDBC 4.1(爪哇7)增加了以下:

  • 如果調用closeOnCompletion()並且 從該語句創建的ResultSet已被讀取超出最後一行(和讀取使closeOnCompletion發生後

我不認爲「嘗試 - 與資源」被自動關閉連接,但「只是」爲try ... finally語法糖。

1

創建它的連接關閉時它關閉。

1

您可以使用try-與資源語句自動關閉 java.sql.Connection中,java.sql.Statement中,和java.sql.ResultSet中 對象,無論是否SQLException的或任何其他異常已引發 。 「試用資源」語句包含一個嘗試 語句和一個或多個聲明的資源(由 分號分隔)。來源:Using try-with-resources Statements to Automatically Close JDBC Resources

下面的語句是一個try-與資源語句聲明一個資源,語句,它會自動關閉,然後在try塊終止:

try (Statement stmt = con.createStatement()) { 

    // ... 

} 
+0

你應該補充說這個代碼只能在Java 7上運行:) –

1

如果您關注的是有關確定關閉連接,資源等等,我會簡單地使用spring jdbc。它增加了很少的開銷,它很容易實現,並且會讓你擺脫那些單調乏味的try-catch-finally結構,只是爲了進行簡單的查詢。

相關問題