1. 程式人生 > >MySQL資料庫查詢結果過大解決記憶體溢位的解決方案

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條記錄到客戶端 )