如何为具体查询设置 fetchSize?
Posted
技术标签:
【中文标题】如何为具体查询设置 fetchSize?【英文标题】:How to set fetchSize for concrete query? 【发布时间】:2019-03-23 20:54:09 【问题描述】:我只想为一个查询设置 fetchSize,但我找不到合适的 api。
我的代码如下所示:
jdbcTemplate.query(query, new RowCallbackHandler()
@Override
public void processRow(ResultSet rs) throws SQLException ...
);
如何将 fetchSize 传递给查询?
【问题讨论】:
【参考方案1】:这可以使用PreparedStatementSetter
(JavaDoc)
给定查询
select * from mytable where user_id > ?
你可以使用
jdbcTemplate.query(query,
new PreparedStatementSetter()
@Override
public void setValues(final PreparedStatement ps) throws SQLException
ps.setInt(1, userId);
ps.setFetchSize(500);
,
new RowCallbackHandler()
@Override
public void processRow(final ResultSet rs) throws SQLException
...
);
或者以更紧凑的形式
jdbcTemplate.query(
query,
ps ->
ps.setInt(1, userId);
ps.setFetchSize(500);
,
rs -> ...
);
请记住
实现负责设置任何必要的参数。 已经提供了带占位符的 SQL。
对于单个结果对象,使用
public <T> T query(String sql,
PreparedStatementSetter pss,
ResultSetExtractor<T> rse) throws DataAccessException;
方法。例如
jdbcTemplate.query(
query,
new ArgumentPreparedStatementSetter(new Object[] balanceId),
rs ->
final String field1 = rs.getString("field1");
// Get other fields and construct the resulting object
return new YourClass(field1, ...);
);
【讨论】:
看起来很完美! @g*** 问题是我从未见过使用它的教程。这就是为什么它在文档中如此“隐藏”。 @g*** btw,记住你需要手动设置值。 什么意思? 您的建议 ps.setInt(1, userId) 对我很有帮助。感谢您的努力以上是关于如何为具体查询设置 fetchSize?的主要内容,如果未能解决你的问题,请参考以下文章