![](/img/trans.png)
[英]SQL Server - a query returns data but ResultSet using same query returns empty
[英]Is the order of the rows in the ResultSet constant for the same SQL query via JDBC on the same state of DB data?
嘗試編寫使用JDBC驅動程序(DB供應商可以是Oracle,DB2或Postgres)在Java中執行SQL查詢的作業。 該查詢並不重要。 假設它過濾1個DB表中幾列中的某些值,結果是幾千行。
對於ResultSet中的每一行,我需要執行一些邏輯,有時可能會失敗。
我有一個光標位置,因此,我“記住”了上次成功處理的行位置。
現在,我想在失敗的情況下實現“恢復”功能,以免再次處理整個ResultSet。
我去了Java 8的JDBC規范,卻沒有發現行的順序(對相同數據的相同查詢是否相同)? 在數據庫供應商規范中也找不到任何內容。
任何人都可以暗示在哪里可以找到有關行順序可預測性的答案?
您可以通過包含ORDER BY
子句來保證行的順序,該子句包含唯一標識行所需的所有列。 實際上,這是保證重復調用SELECT語句的順序的唯一方法,即使數據庫中沒有任何變化。 如果沒有明確的ORDER BY子句,則數據庫引擎可以在特定時刻以最方便的順序返回行。
考慮一個簡單的例子:
您是數據庫的唯一用戶。 數據庫引擎在內存中有一個行緩存,可以保存最近檢索到的1000行。 數據庫服務器剛剛重新啟動,因此緩存為空。 您SELECT * FROM tablename
,數據庫引擎將檢索2000行,其中的最后1000行保留在緩存中。 然后,再次執行SELECT * FROM tablename
。 數據庫引擎檢查緩存並從上一個查詢中找到1000行,因此它會立即返回它們,因為這樣做不必再次擊中磁盤。 然后繼續查找其他1000行。 最終結果是,對於最初的SELECT 最后返回的1000行實際上是為隨后的SELECT 首先返回的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.