2012-06-06 94 views
1

結果集關閉時語句會發生什麼?ResultSet關閉時語句會發生什麼?

Statement stmt = null; 
    ResultSet rs = null; 

    try { 
     stmt = con.createStatement(); 
     rs = stmt.executeQuery(query.toString()); 
     ... 
    } 

    // lots of code 

    rs.close() 

注:一個結果對象被生成它當Statement對象關閉, 重新執行,或用於從 序列檢索下一個結果的聲明 對象自動關閉多個結果。

但是,當ResultSet先關閉時會發生什麼?

對於這件事,首先會發生什麼?

回答

6

您應該按照與創建對象相反的順序關閉對象。首先,ResultSet,然後Statement,最後,Connection

如果您不關閉Statement它保持打開狀態,您可以使用它執行另一個查詢(如果它是PreparedStatementCallableStatement您可以更改查詢參數)。

另請注意,您引用的是JDBC規範,並且它的實現取決於JDBC驅動程序提供者。通常,你不應該相信他們,並手動關閉這些對象。

另一件事 - 我認爲更重要的是 - 如果您使用連接池(如JBoss),關閉連接只是將其釋放回池中,並且不會釋放底層對象。因此,建議您始終手動發佈您創建的所有對象。

+0

+1說明。很好的一個 –

+0

當你關閉連接時,結果集和語句將被自動關閉... – Sajmon

+0

@ hawaii.five-0是的,除非它是一個連接池,並且你只是將連接釋放回池中。 – npe

1

聲明沒有任何反應 - 它保持打開狀態。您可以繼續使用該聲明,但一定要在完成後關閉它。

+0

難道你不覺得它更像評論而不是回答。 –

2

Statement實際上可以重複使用。儘管如果您重複相同的查詢,您應該使用PreparedStatement,因爲查詢將被編譯一次。

當然他們應該當你與他們所做的,但關閉ResultSet不會自動關閉Statement有很好的理由被關閉。

相關問題