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。调用这个方法也能够实现流式访问数据。


你可能感兴趣的:(数据库,mysql)