正常來說,一般是不會出現這種情況的,但也不能保證,偶爾有這種情況發生,解決方案如下:
##使用分頁查詢語句。 (建議學習:mysql學習)
因為分頁查詢每次只會查詢少量數據,所以不會佔用太多內存,而且資料量很大的時候,分頁查詢會節省一些時間的。
String sql = " SELECT uid,uname FROM t_user LIMIT ?,? " ; PreparedStatement ps = con.prepareStatement(sql) ; int pageSize = 10000; int pageId = 0; do { pst.setInt(1, pageId * pageSize); pst.setInt(2, pageSize); ResultSet rs = pst.executeQuery(); boolean isEmpty = true; while (rs.next()) { isEmpty = false; id = rs.getInt(1); name = rs.getString(2); } if (isEmpty) { break; } pageId++; } while (true); con.close(); } catch (SQLException e) { e.printStackTrace(); }
新增url參數配置
在jdbc的URL上加兩個參數就OK,成功解決記憶體溢出的問題。"jdbc:mysql://localhost:3306/db3?useCursorFetch=true&defaultFetchSize=100";( 解釋一下Fetch,當我們執行一個SQL查詢語句的時候,需要在客戶端和伺服器端都打開一個遊標,並且分別申請一塊記憶體空間,作為存放查詢的資料的一個緩衝區。這塊記憶體區,存放多少筆資料就由fetchsize決定,同時每次網路包會傳送fetchsize條記錄到客戶端)
以上是sql查詢資料過多記憶體溢出怎麼辦的詳細內容。更多資訊請關注PHP中文網其他相關文章!