我有一个消费者可以说他不想处理更多数据。
我已经查看了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?
}}
);
答案 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;
}
});