HasorDB 流式读取超大表

2021-12-30 11:25 更新

当查询一张超大表并获取它的结果集时要使用 ​流式返回 ​,否则内存极易出现溢出。 不同的数据库开启流式返回的方式虽有差异,但都需要设置 ​Statement/PreparedStatement ​的参数。

下面就以 MySQL 为例展示一下通过定制 ​Statement ​实现流式查询的例子:

// 定制 PreparedStatement
PreparedStatementCreator creator = con -> {
    PreparedStatement ps = con.prepareStatement(
        "select * from test_user",
        ResultSet.TYPE_FORWARD_ONLY,
        ResultSet.CONCUR_READ_ONLY
    );
    ps.setFetchSize(Integer.MIN_VALUE);
    return ps;
};

// 行读取工具
MappingRowMapper<TestUser> rowMapper = new MappingRowMapper<>(TestUser.class);

// 流式消费数据
RowCallbackHandler handler = (rs, rowNum) -> {
    TestUser dto = rowMapper.mapRow(rs, rowNum);
    ...
};

// 执行查询并流式处理
jdbcTemplate.query(creator, new RowCallbackHandlerResultSetExtractor(handler));


以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号