我只有几个表,其中包含大量数据(大约1亿条记录)。所以我不能将这些数据存储在内存中,但是我想使用 java.util.stream
类对这个 结果集进行流处理,并将这个流传递给另一个类。我读过有关 Stream.of
和 Stream.Builder
操作符的内容,但它们是内存中的缓冲流。那么有没有办法解决这个问题呢?
先谢谢你。
更新 # 1
好吧,我谷歌了一下,找到了 Jooq图书馆。我不确定,但看起来它可能适用于我的测试用例。总而言之,我只有几个表格有大量的数据。我想流我的结果集和转移这个流到另一个方法。就像这样:
// why return Stream<String>? Because my result set has String type
private Stream<Record> writeTableToStream(DataSource dataSource, String table) {
Stream<Record> record = null;
try (Connection connection = dataSource.getConnection()) {
String sql = "select * from " + table;
try (PreparedStatement pSt = connection.prepareStatement(sql)) {
connection.setAutoCommit(false);
pSt.setFetchSize(5000);
ResultSet resultSet = pSt.executeQuery();
//
record = DSL.using(connection)
.fetch(resultSet).stream();
}
} catch (SQLException sqlEx) {
logger.error(sqlEx);
}
return record;
}
谁能告诉我,我走的路对吗? 谢谢。
更新 # 2
我在 Jooq上做了一些实验,现在可以说上面的决定不适合我。这个代码 record = DSL.using(connection).fetch(resultSet).stream();
花费了太多的时间