互聯網上有很多關於JDBC分頁/遍歷巨大結果集的不同教程。 所以,基本上有許多方法,到目前爲止,我發現:(?)JDBC分頁:供應商特定的sql與結果集fetchSize
- Vendor specific sql
- 滾動結果集
- 保持平淡導致內存設置,行只在必要時映射(使用FETCHSIZE)
結果集獲取大小,無論是明確地設置,或通過默認等於 到語句獲取傳遞給它的大小,確定 多個行,在任何後續的檢索前往該結果集的 數據庫。這包括完成原始查詢所需的仍然爲 的任何行程,以及任何將 數據重新排列到結果集中的行程。可以顯式地或者隱式地重新獲取數據,以更新滾動敏感的或可滾動不敏感/可更新的結果集。
- 光標(?)
- Custom seek method paging implemented by jooq
對不起,搞亂所有這些,但我需要有人來清除出我。 我有一個簡單的任務,其中服務使用者用pageNumber和pageSize請求結果。貌似我有兩個選擇:
- 使用供應商特定的SQL
- 保持連接/語句/結果存儲在存儲器設置,並依靠JDBC FETCHSIZE
在後一種情況下,我使用rxJava-jdbc和如果你看producer implementation它擁有結果集,那麼你所做的只是調用請求(long n)並且處理另外n行。當然,一切都隱藏在rxJava的Observable suggar下。我不喜歡這種方法是,你必須在不同的服務調用之間保存resultSet,並且如果客戶忘記耗盡或關閉它,必須清除那個resultSet。 (注意:這裏的resultSet是java ResultSet類,不是實際的數據)
那麼,推薦的分頁方式是什麼?與持有連接相比,供應商特定的sql是否被認爲是慢的?
我使用的是oracle,ScrollableResultSet不建議與巨大的結果集一起使用,因爲它在客戶端緩存整個結果集數據。 proof
謝謝,還沒有想過有限數量的遊標。好點子。 –