如何为具体查询设置fetchSize?

问题描述 投票:1回答:1

我想只为一个查询设置fetchSize,我找不到合适的api。

我的代码看起来像这样:

jdbcTemplate.query(query, new RowCallbackHandler() {
            @Override
            public void processRow(ResultSet rs) throws SQLException {...}
);

如何将fetchSize传递给查询?

java spring jdbc spring-jdbc jdbctemplate
1个回答
1
投票

这可以使用PreparedStatementSetterJavaDoc)完成 鉴于查询

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, ...);
    }
);
© www.soinside.com 2019 - 2024. All rights reserved.