」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 如何在 Spring 中串流大型 MySQL 結果集以避免 OutOfMemoryError?

如何在 Spring 中串流大型 MySQL 結果集以避免 OutOfMemoryError?

發佈於2024-12-22
瀏覽:995

How to Stream Large MySQL Result Sets in Spring to Avoid OutOfMemoryError?

使用MySQL 串流處理大型結果集

在Spring 應用程式中處理大量MySQL 表時,當驅動程式試圖執行下列操作時,可能會出現OutOfMemoryException:將整個表載入到記憶體中。設定statement.setFetchSize(Integer.MIN_VALUE);可能還不夠,因為這僅向 JDBC 驅動程式提供提示。

要在MySQL JDBC 驅動程式中啟用結果集流,需要更全面的方法:

  1. 建立語句實例:

    stmt = conn.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY, java.sql.ResultSet.CONCUR_READ_ONLY);
  2. 設定 Fetch Size:

    stmt.setFetchSize(Integer.MIN_VALUE);

注意事項:

此方法有一定的注意事項:

  • 必須讀取結果集中的所有行(或結果集已關閉),然後再對連接發出任何進一步的查詢。否則將導致異常。
  • 在事務中,只有在事務完成後才會釋放鎖,這表示該語句必須先完成執行。
  • 如果 OutOfMemoryError 仍然存在,則根本問題可能是Java程式碼中記憶體使用過多。這需要立即進行資料處理而不是儲存。

其他見解:

有關處理大型結果集的進一步策略,請考慮以下相關問題及其答案: [連結至類似問題]。

最新教學 更多>
  • C++中靜態工廠方法和工廠類別如何選擇?
    C++中靜態工廠方法和工廠類別如何選擇?
    如何在C 中正確實現工廠方法模式工廠方法模式是一種設計模式,允許創建對象而無需指定對象的確切類別要創建的對象。當運行時確定要建立的物件的類別時,或者需要提供統一的介面來建立不同類型的物件時,通常會使用這種模式。 在 C 中,有以下幾種方式實現工廠方法模式。一種常見的方法是使用在要為其建立物件的類別中...
    程式設計 發佈於2024-12-22
  • Java 中的 HashMap 或 Hashtable:對於單執行緒應用程式來說,哪個更有效率?
    Java 中的 HashMap 或 Hashtable:對於單執行緒應用程式來說,哪個更有效率?
    Java 中的HashMap 與Hashtable:非線程應用程式的主要區別和效率HashMap 和Hashtable 是Java 中的基本資料結構,它們儲存鍵值對。了解它們的差異對於選擇最合適的選項至關重要。 主要差異:同步: Hashtable 是同步的,而 HashMap 是同步的不是。同步意...
    程式設計 發佈於2024-12-22
  • 在 Go 中使用 WebSocket 進行即時通信
    在 Go 中使用 WebSocket 進行即時通信
    构建需要实时更新的应用程序(例如聊天应用程序、实时通知或协作工具)需要一种比传统 HTTP 更快、更具交互性的通信方法。这就是 WebSockets 发挥作用的地方!今天,我们将探讨如何在 Go 中使用 WebSocket,以便您可以向应用程序添加实时功能。 在这篇文章中,我们将介绍: WebSoc...
    程式設計 發佈於2024-12-22
  • MySQL 能否處理遙遠過去的日期,例如 1200 年?
    MySQL 能否處理遙遠過去的日期,例如 1200 年?
    MySQL 對歷史日期的支援許多資料庫系統,包括 MySQL,在處理歷史日期時都有限制。本文探討了儲存和使用公曆之前的日期的限制和替代方案。 MySQL 可以處理像 1200 這樣的日期嗎? 從技術上講,MySQL 可以儲存日期早在 1000 年。然而,對於在此之前的日期,存在潛在的問題考量。 歷史...
    程式設計 發佈於2024-12-22
  • 如何偵測和計算 PHP 數組中的唯一值?
    如何偵測和計算 PHP 數組中的唯一值?
    偵測並顯示陣列中唯一值的出現在 PHP 中,使用陣列通常涉及處理重複值。為了有效地管理和分析數據,必須識別並計算這些重複出現的次數。讓我們探索針對這項挑戰的詳細解決方案。 使用 array_count_values() 函數提供了一個簡單的方法。此函數接受一個陣列作為輸入並傳回一個關聯數組,其中鍵代...
    程式設計 發佈於2024-12-22
  • HTML 格式標籤
    HTML 格式標籤
    HTML 格式化元素 **HTML Formatting is a process of formatting text for better look and feel. HTML provides us ability to format text without us...
    程式設計 發佈於2024-12-22
  • 如何避免 JavaScript 中 parseInt 的八進位解釋問題?
    如何避免 JavaScript 中 parseInt 的八進位解釋問題?
    JavaScript 的八進制危險:parseInt 錯誤行為的解決方法JavaScript 的parseInt 函數在遇到帶有前導零的數字時可能會出錯。該問題源於其將前導零解釋為八進制數字的傾向,從而導致錯誤的結果。 範例:parseInt('01'); // 1 parseInt('08'); ...
    程式設計 發佈於2024-12-22
  • Golang 是否提供行動語義,它如何實現類似的最佳化?
    Golang 是否提供行動語義,它如何實現類似的最佳化?
    Golang 中的行動語義Bjarne Stroustrup 在 C 11 中引入了行動語義,透過消除不必要的複製來優化資料傳輸。這種技術在處理大型資料結構時特別有用。 Golang 支援行動語意嗎? 與 C 不同,Golang 不以同樣的方式明確支援行動語意。然而,Go 採用了一種獨特的方法,透過...
    程式設計 發佈於2024-12-22
  • Go ":=" 與 "=":何時使用短變數宣告?
    Go ":=" 與 "=":何時使用短變數宣告?
    理解Go中“:=”和“=”的區別作為Go新手,你可能會困惑對於變量賦值,“ :=”和“=”似乎可以互換使用。然而,圍繞變數聲明的上下文有一個微妙的區別。 「=」的作用在 Go 中,「=」主要用於變數賦值。它遵循“var name type = expression”的語法,其中“name”代表要分配...
    程式設計 發佈於2024-12-22
  • 如何在 Python 中建立類似 Cron 的調度?
    如何在 Python 中建立類似 Cron 的調度?
    Python 類別 Cron 調度基於靈活表達式的調度任務的需求出現在各種環境中。雖然 cron 在許多環境中都能實現此目的,但它可能並不普遍可用或可行。在這種情況下,Python 提供了多種選項來建立您自己的類似 cron 的排程器。 使用調度庫的輕量級方法如果輕量級且純粹基於Python 的解決...
    程式設計 發佈於2024-12-22
  • 如何防止 JDBC 應用程式中的 ORA-01000:最大開啟遊標錯誤?
    如何防止 JDBC 應用程式中的 ORA-01000:最大開啟遊標錯誤?
    管理遊標和JDBC 物件以防止ORA-01000了解遊標和JDBC 之間的連接 ]當資料庫執行個體耗盡可用空間時,會發生ORA-01000 最大開啟遊標錯誤遊標。 資料庫上的單一遊標支援每個 JDBC ResultSet。 每個 JDBC Connection 可以處理多個事務,但一次只能處理一個事...
    程式設計 發佈於2024-12-22
  • 我們如何有效地混淆嵌入在可執行二進位檔案中的字串?
    我們如何有效地混淆嵌入在可執行二進位檔案中的字串?
    混淆二進位代碼中的字串問題陳述混淆嵌入可執行二進位檔案中的字串對於保護加密金鑰等敏感資訊免遭未經授權的存取非常有價值。然而,像將字串儲存在字元陣列中這樣簡單的方法可以在分析過程中輕鬆揭示其內容。 解決方案為了有效地隱藏已編譯二進位檔案中的字串,可以採用更複雜的方法。考慮以下範例:#include &...
    程式設計 發佈於2024-12-22
  • Bootstrap 4 Beta 中的列偏移發生了什麼事?
    Bootstrap 4 Beta 中的列偏移發生了什麼事?
    Bootstrap 4 Beta:列偏移的刪除和恢復Bootstrap 4 在其Beta 1 版本中引入了重大更改柱子偏移了。然而,隨著 Beta 2 的後續發布,這些變化已經逆轉。 從 offset-md-* 到 ml-auto在 Bootstrap 4 Beta 1 中, offset-md-*...
    程式設計 發佈於2024-12-22
  • 為什麼無法將非常量左值參考綁定到 C++ 中的右值?
    為什麼無法將非常量左值參考綁定到 C++ 中的右值?
    無法將非常量左值引用綁定到右值:解決方案給定的程式碼片段在初始化類別Foo 的對象時遇到錯誤在Bar 類別的建構子中。錯誤訊息表示非常量左值參考 (Foo f) 正在綁定到右值(呼叫 genValue() 的結果)。 在 C 中,非常量引用參數只能引用命名的變數(左值)。然而,genValue() ...
    程式設計 發佈於2024-12-22
  • 如何在 React 中選擇 DOM 元素:`document.getElementById()` 的替代方案?
    如何在 React 中選擇 DOM 元素:`document.getElementById()` 的替代方案?
    如何在 React 中選擇 DOM 元素? React 中 document.getElementById() 的等價物是什麼在 React 中,與使用普通 JavaScript 不同,直接存取 DOM 元素是不同的。 React 使用虛擬 DOM 來有效地更新真實 DOM,這使得它與普通 Java...
    程式設計 發佈於2024-12-22

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3