我有一个方案给你参考:
java jdbc 中有个参数称为 游标滚动,只允许向前滚动,不允许往回滚动,通常是作为 pipe line 的流式处理使用,但是核心问题:这么多数据,最后通过 pipe line处理之后,你放哪儿?(当然,这是你需要操心的)
jdbc查询mysql时,默认会一次性将sql查询的数据全部从服务器加载到内存中,当数据过多时,导致内存溢出,最佳的办法:按页分次滚动获取数据即可
Statement statement = connection.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
// 设置从数据库取得多行的行数大小
statement.setFetchSize(batchSize);
// 将此 Statement 对象生成的所有 ResultSet 对象可以包含的最大行数限制设置为给定数
statement.setMaxRows(maxRows);
根据你的服务实际的内存大小,设置每次获取的行数和最大限定,避免过载
请参考