最近在做數據遷移,使用的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。調用這個方法也能夠實現流式訪問數據。