2008-10-31 75 views
2

目前,我有JDBC代碼以下基本stucture:JDBC:我什麼時候可以關閉什麼

獲取連接

(做下一個4行幾次,從來沒有致閉幕詞)
GET語句
得到的結果集
處理結果集
接近的結果集

緊密結合

編寫此代碼後,我想到了我需要關閉該語句。
1什麼是不關閉聲明的影響。
2將下面的工作,這個si會關閉語句阻止我正常處理結果集?

獲取連接

(做下一個5行幾次)
GET語句
獲取結果集
緊密聲明
處理結果集
接近的結果集

緊密結合

回答

3

不幸的是,答案取決於您的JDBC驅動程序。你在那裏寫的東西可能會奏效。

但是,一般規則是隻有在完成相應的結果集後才關閉語句。

編輯:我知道你有第二個問題,你問關於不關閉語句/ Resultset等的影響。這些影響還取決於您的JDBC驅動程序,但它可能會導致嚴重的資源泄漏。

7

關閉行爲在JDBC Specification中指定。關閉連接將釋放與連接關聯的所有JDBC資源,並隱式關閉所有語句,結果集等。關閉語句將關閉結果集。

示例2不能保證正常工作。該語句應該在ResultSet被使用後關閉。規範說,如果您嘗試使用該ResultSet,您應該得到一個SQLException(一些JDBC驅動程序嚴格不遵循規範 - 而MS不是最大的違規者)。

如果您忘記關閉ResultSet或Statement,則最糟糕的情況是您使用數據庫和JVM資源的時間超過了必要的時間。在資源受限或高負載的系統上,這可能會導致內存/連接/資源錯誤或性能下降。

1

如果您正在使用Oracle和忘記關閉陳述了一段時間後,你會得到

ORA-01000: maximum open cursors exceeded 

相關問題