mysql大數量sql查詢導致oom錯誤

最近在做數據遷移,使用的sql語句沒有添加where條件,導致客戶端程序報oom錯誤。

是因爲jdbc默認會把查詢結果集全部返回到客戶端導致oom錯誤。查找資料發現mysql的jdbc還支持以流的形式訪問結果集。每當調用ResultSet的next()方法時返回部分數據。不會導致oom。設置如下

方法一:

preparStat= conn.prepareStatement(sql, ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);

preparStat.setFetchSize(Integer.MIN_VALUE);

preparStat.setFetchDirection(ResultSet.FETCH_REVERSE);

方法二:

可以把Statement強轉爲mysql驅動包裏面的Statement.mysql自己實現的statement有一個特有的方法爲enableStreamingResults。調用這個方法也能夠實現流式訪問數據。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章