如何在Spring-JDBC中停止处理行?

时间:2018-04-27 10:09:29

标签: java spring jdbc spring-jdbc

我有一个消费者可以说他不想处理更多数据。

我已经查看了Spring JdbcTemplate中的方法,但我认为没有办法告知Spring我不想在回调时处理更多行。

我可以抛出异常,但jdbcTemplate.query(...)会重新抛出此异常,这是我不希望的行为。

有没有办法强制停止处理行而不会导致异常?

jdbc.query(sql, new RowCallbackHandler() {

  @Override
  public void processRow(ResultSet rs) throws SQLException
  {
    // TODO how to stop if I want to do it here?
  }}
);

2 个答案:

答案 0 :(得分:0)

看看:

  

jdbcTemplate.setFetchSize(intValue):为JDBC驱动程序提供有关应从数据库中提取的行数的提示   此Statement生成的ResultSet对象需要更多行。   如果指定的值为零,则忽略提示。默认   值为零。

     

jdbcTemplate.setMaxRows(intValue):设置此Statement生成的任何ResultSet对象的最大行数限制   对象可以包含给定的数字。如果超过限制,   多余的行被静静地丢弃。

我认为 jdbcTemplate.setMaxRows(intValue)可能对您的要求有所帮助。

答案 1 :(得分:0)

(如果有人进入此线程)-使用ResultSetExtractor。 在while条件中循环遍历结果集,并在需要时中断。

Set<String> distinctNames = jdbcTemplate.query(query,
new ResultSetExtractor<Set<String>>(){
    public Set<String> extractData(ResultSet rs) throws SQLException, DataAccessException {
        Set<String> distinctNames = new HashSet<>();
        Integer cacheMax = 1000
        while(rs.next() && distinctNames.size() <= cacheMax){   
        // magic is in while loop condition to break out when we want ignoring rest of results from DB.
            distinctNames.add(rs.getString("COLUMN_NAME"));
        }
        return distinctNames;
    }
});