2013-08-18 89 views
0

this預言Java教程:關閉ResultSet的遊標?

以下語句指定當提交 方法被稱爲從用getPrice查詢生成的ResultSet 對象的光標被關閉。請注意,如果你的DBMS不支持 ResultSet.CLOSE_CURSORS_AT_COMMIT,那麼這個常數被忽略:

getPrice = con.prepareStatement(query, ResultSet.CLOSE_CURSORS_AT_COMMIT); 

這是否意味着ResultSet.CLOSE_CURSORS_AT_COMMIT關閉ResultSet? 從名稱看來,它只是關閉了ResultSet的cursore。如果是這種情況會有什麼用? PS:我知道在con.commit()之後會發生什麼事情。但是實際上什麼關閉?光標?光標是什麼意思? 在此先感謝。

回答

1

這裏是the javadoc說:

表明當前事務時將提交與此可保存性的打開的ResultSet對象將被關閉的常量。

所以是的,結果集本身將被關閉。

0

只有在提交方法調用後,光標纔會關閉。

+0

我明白,但爲什麼僅關閉遊標?它的範圍是什麼?這是否意味着關閉整個結果集? – Rollerball

+0

嗨,在這種情況下,如果您調用commit,那麼整個結果集將會關閉(在您調用commit()方法之後),並且您無法再讀取它。 – IBJ

+0

那麼他們爲什麼不說ResultSet,但光標.. – Rollerball

0

關於光標:
Here對光標是什麼的解釋; Wiki解釋什麼是與數據庫視圖結果集相關的遊標。

從JDBC程序員視圖:

您通過遊標訪問一個結果對象中的數據。請注意, 這個遊標不是數據庫遊標。該遊標是指向 指向ResultSet中的一行數據的指針。最初,光標位於第一行之前的位置爲 。方法ResultSet.next將 遊標移動到下一行。如果光標位於最後一行之後的 ,此方法返回false。此方法通過while循環重複調用ResultSet.next方法以遍歷ResultSet中的所有 數據。


關於Statement.CLOSE_CURSORS_AT_COMMIT

Statement.CLOSE_CURSORS_AT_COMMIT:這表明當 提交當前事務與此可保存性的打開 ResultSet對象將被關閉的常量。

當調用此 方法時關閉遊標可以爲某些 應用程序帶來更好的性能。

所以,光標會(理論上)關閉;我寫的,因爲理論上

,如果你的DBMS不支持ResultSet.CLOSE_CURSORS_AT_COMMIT,然後 這個常數被忽略