您好,登錄后才能下訂單哦!
這篇文章主要介紹sql查詢數(shù)據(jù)過多內存溢出的解決方法,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
正常來說,一般是不會出現(xiàn)這種情況的,但也不能保證,偶爾有這種情況發(fā)生,解決方案如下:
使用分頁查詢語句。
因為分頁查詢每次只會查詢少量數(shù)據(jù),所以不會占用太多內存,而且數(shù)據(jù)量很大的時候,分頁查詢會節(jié)約一些時間的。
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參數(shù)配置
在jdbc的URL上加兩個參數(shù)就OK,成功解決內存溢出的問題。
"jdbc:mysql://localhost:3306/db3?useCursorFetch=true&defaultFetchSize=100";
( 解釋一下Fetch,當我們執(zhí)行一個SQL查詢語句的時候,需要在客戶端和服務器端都打開一個游標,并且分別申請一塊內存空間,作為存放查詢的數(shù)據(jù)的一個緩沖區(qū)。這塊內存區(qū),存放多少條數(shù)據(jù)就由fetchsize來決定,同時每次網(wǎng)絡包會傳送fetchsize條記錄到客戶端 )
以上是“sql查詢數(shù)據(jù)過多內存溢出的解決方法”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業(yè)資訊頻道!
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內容。