簡體   English   中英

在相同的DB數據狀態下,通過JDBC進行的同一SQL查詢的ResultSet中的行順序是否恆定?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM