當前正在部署基於OFBiz的ERP,我們遇到了以下問題:框架的一些代碼調用resultSet.last()來了解結果集的總行數。使用Oracle JDBC Driver v11和v10,它會嘗試緩存客戶機內存中的所有行,導致JVM崩潰,因爲它沒有足夠的堆空間。Oracle是否通過JDBC支持服務器端可滾動遊標?
經過研究,問題似乎是Oracle JDBC通過使用緩存在客戶端而不是服務器中實現Scrollable Cursor。使用datadirect驅動程序,該問題已解決,但似乎對resultset.last()的調用需要太多才能完成,因此應用程序服務器會中止事務
是否有任何方法通過jdbc實現可滾動遊標oracle而不訴諸於datadirect驅動程序?
什麼是知道給定結果集長度的最快方法?
在此先感謝 伊斯梅爾
我會先問一個切線問題;你同時需要結果集的數據和大小,還是隻需要執行一個COUNT(*)類型的查詢來查找行數?你是否真的需要行數呢?我曾多次看到過這樣的情況:如果程序在真正不需要的時候花費很多時間獲取分頁行的總數,那麼這種情況非常昂貴。 – Gandalf 2009-06-29 21:32:02
需要確定分頁方案中的頁數。我們試圖避免使用last,並使用iterator next()方法檢查null來計算currentIndex。有沒有一種快速的方法來知道沒有使用last()方法的頁數。 我們的解決方法是使用相同的條件執行COUNT查詢,然後執行數據查詢 – Ismael 2009-06-29 22:04:42