W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
當(dāng)查詢一張超大表并獲取它的結(jié)果集時(shí)要使用 ?流式返回
?,否則內(nèi)存極易出現(xiàn)溢出。 不同的數(shù)據(jù)庫(kù)開啟流式返回的方式雖有差異,但都需要設(shè)置 ?Statement/PreparedStatement
?的參數(shù)。
下面就以 MySQL 為例展示一下通過定制 ?Statement
?實(shí)現(xiàn)流式查詢的例子:
// 定制 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);
// 流式消費(fèi)數(shù)據(jù)
RowCallbackHandler handler = (rs, rowNum) -> {
TestUser dto = rowMapper.mapRow(rs, rowNum);
...
};
// 執(zhí)行查詢并流式處理
jdbcTemplate.query(creator, new RowCallbackHandlerResultSetExtractor(handler));
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: