sql查詢數據過多內存溢出怎么辦

正常來說,一般是不會出現這種情況的,但也不能保證,偶爾有這種情況發生,解決方案如下:

sql查詢數據過多內存溢出怎么辦

使用分頁查詢語句。?? ? (推薦學習: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條記錄到客戶端 )

? 版權聲明
THE END
喜歡就支持一下吧
點贊5 分享