如何为具体查询设置fetchSize?
How to set fetchSize for concrete query?
我只想为一个查询设置 fetchSize,但找不到合适的 api。
我的代码如下所示:
jdbcTemplate.query(query, new RowCallbackHandler() {
@Override
public void processRow(ResultSet rs) throws SQLException {...}
);
如何将 fetchSize 传递给查询?
这可以使用 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 -> { ... }
);
请记住
Implementations are responsible for setting any necessary parameters.
SQL with placeholders will already have been supplied.
对于单个结果对象,使用
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, ...);
}
);
我只想为一个查询设置 fetchSize,但找不到合适的 api。
我的代码如下所示:
jdbcTemplate.query(query, new RowCallbackHandler() {
@Override
public void processRow(ResultSet rs) throws SQLException {...}
);
如何将 fetchSize 传递给查询?
这可以使用 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 -> { ... }
);
请记住
Implementations are responsible for setting any necessary parameters.
SQL with placeholders will already have been supplied.
对于单个结果对象,使用
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, ...);
}
);