MySQL資料庫查詢結果過大解決記憶體溢位的解決方案
正常來說,一般是不會出現這種情況的,但也不能保證,偶爾有這種情況發生,解決方案如下:
1.使用分頁查詢語句。 因為分頁查詢每次只會查詢少量資料,所以不會佔用太多記憶體,而且資料量很大的時候,分頁查詢會節約一些時間的。 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(); } 2.新增url引數配置
在jdbc的URL上加兩個引數就OK,成功解決記憶體溢位的問題。 "jdbc:mysql://localhost:3306/db3?useCursorFetch=true&defaultFetchSize=100"; ( 解釋一下Fetch,當我們執行一個SQL查詢語句的時候,需要在客戶端和伺服器端都開啟一個遊標,並且分別申請一塊記憶體空間,作為存放查詢的資料的一個緩衝區。這塊記憶體區,存放多少條資料就由fetchsize來決定,同時每次網路包會傳送fetchsize條記錄到客戶端 )