繁体   English   中英

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

[英]How do I stop processing rows in 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?
  }}
);

(如果有人来到这个线程) - 使用 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;
    }
});

看看:

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

jdbcTemplate.setMaxRows(intValue):将此 Statement 对象生成的任何 ResultSet 对象可以包含的最大行数设置为给定数。 如果超出限制,多余的行将被静默删除。

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

您是否最终弄清楚了这一点?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM