根據java.sql.Statement
的documentation爲getResultSet
,它說:的getResultSet()「應該被稱爲每個結果只有一次」
檢索當前結果作爲ResultSet對象。每個結果只能調用一次該方法 。
使用一些測試代碼,我跑executeQuery()
並多次打電話給getResultSet()
並觀察返回的ResultSet
指向同一個對象。所以我猜測它不會返回一個不同的ResultSet
,你需要單獨關閉它。但是,這當然可以是我的JDBC驅動程序獨有的。
縱觀documentation爲ResultSet
它說:
默認的ResultSet對象不可更新,並具有遊標 向前移動而已。因此,只能從第一行到最後一行遍歷一次,並且只能遍歷一次。
這似乎是一個很好的理由,因爲它可能導致一些「陷阱」的情況多次調用它可能不是一個好主意。如果這是唯一的原因,我覺得他們可能只是說,所以我認爲可能比這更多。
因此,有誰知道爲什麼每個結果不應該多次調用getResultSet
?這question是讓我好奇的第一個地方。
沒有發佈這個答案,因爲它只是一個預感,但我懷疑這是給JDBC驅動程序開發人員留有餘地的方法,使他們無法定義當你多次調用它時會發生什麼。在你的特定情況下,它可以工作,但如果你曾經切換JDBC驅動程序,它可能不會。 – 2012-04-02 22:19:06
我認爲它就像這樣簡單:ResultSet對象具有狀態。只有一個ResultSet對象作爲Statement的成員。獲取對象不會重新執行語句。如果您在第一次獲得後修改了某些內容,則無法保證第二次獲取對象與第一次獲取對象的狀態相同。所以這只是一個謹慎。查看Postres jdbc驅動程序(org.postgresql.jdbc2.AbstractJdbc2Statement),我們可以看到它在內部使得許多調用像這樣:return(result!= null && result.getResultSet()!= null); – Glenn 2012-04-03 01:08:13