簡體   English   中英

Java ResultSet 從數據庫中請求數據多少次?

[英]How many times does a Java ResultSet ask for data from database?

我可以看到 Java ResultSet 從數據庫中請求數據的次數嗎? 我有一個大表(100 萬條記錄),我想看看它從數據庫中提取了多少數據塊。 我的數據庫是 Oracle。

“結果集”文檔指出:

獲取大小

默認情況下,當 Oracle JDBC 運行查詢時,它會從數據庫 cursor 中一次檢索 10 行的結果集。這是默認的 Oracle 行提取大小值。 您可以通過更改行提取大小值來更改每次訪問數據庫 cursor 時檢索到的行數。

標准 JDBC 還允許您指定每次數據庫往返查詢所提取的行數,該數字稱為提取大小。 在 Oracle JDBC 中,行預取值用作語句 object 中的默認提取大小。設置提取大小會覆蓋行預取設置,並影響通過該語句運行的后續查詢 object。

提取大小也用於結果集中。 當語句 object 運行查詢時,語句 object 的提取大小將傳遞給查詢產生的結果集 object。 但是,您也可以在結果集中設置提取大小 object 以覆蓋傳遞給它的語句提取大小。

筆記:

生成結果集后對語句 object 的提取大小所做的更改不會影響該結果集。

結果集提取大小(顯式設置或默認等於傳遞給它的語句提取大小)決定了在該結果集的任何后續數據庫訪問中檢索的行數。 這包括完成原始查詢仍然需要的任何行程,以及將數據重新提取到結果集中的任何行程。 可以顯式或隱式地重新獲取數據,以更新滾動敏感或滾動不敏感/可更新的結果集。

設置獲取大小

以下方法在所有StatementPreparedStatementCallableStatementResultSet對象中都可用,用於設置和獲取提取大小:

 void setFetchSize(int rows) throws SQLException int getFetchSize() throws SQLException

要設置查詢的提取大小,請在運行查詢之前對語句 object 調用setFetchSize 如果將提取大小設置為N ,則每次訪問數據庫都會提取N行。

運行查詢后,您可以對結果集 object 調用setFetchSize以覆蓋傳遞給它的語句 object 提取大小。 這將影響任何后續訪問數據庫以獲取原始查詢的更多行,以及影響任何以后的行重新獲取。

如果您想知道訪問數據庫的次數,請在語句中調用getFetchSize() ,然后將結果集中的總行數除以獲取大小(並向上舍入)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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