JdbcPagingItemReader:PagingQueryProvider在第二次迭代后添加参数值

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

我创建了一个扩展 JdbcPagingItemReader 的类。我里面有这个配置。

    @PostConstruct
    public void init() throws Exception {
        setDataSource(dsSrv.getUserDataSource());
        setPageSize(Integer.parseInt(pageSize));
        setFetchSize(Integer.parseInt(pageSize));
        setQueryProvider(queryProvider2(dsSrv.getUserDataSource()));
        setRowMapper(rowMapper());

    }
private PagingQueryProvider queryProvider2(DataSource ds) throws Exception {
    SqlPagingQueryProviderFactoryBean queryProvider=new SqlPagingQueryProviderFactoryBean();
    final Map<String, Order> sortKeys = new HashMap<>();
    sortKeys.put("ID", Order.ASCENDING);

    queryProvider.setDataSource(ds);
    queryProvider.setSelectClause("*");
    queryProvider.setFromClause("D_TABLE");
    queryProvider.setWhereClause("ID = '5d7031e6-10f2-4247-b581-17b2fe96449a'");
    queryProvider.setSortKeys(sortKeys);
    return queryProvider.getObject();
  }

问题是,第一次迭代时,查询按预期组装:SELECT TOP 10 * FROM D_TABLE WHERE (ID= '5d7031e6-10f2-4247-b581-17b2fe96449a')

第二次迭代后,我有这个查询: SELECT TOP 10 * FROM D_TABLE WHERE (ID = '5d7031e6-10f2-4247-b581-17b2fe96449a') AND ((ID > ?)) ORDER BY ID ASC

org.springframework.jdbc.UncategorizedSQLException:PreparedStatementCallback; SQL 的未分类 SQLException [SELECT TOP 10 * FROM D_TABLE WHERE (ID = '5d7031e6-10f2-4247-b581-17b2fe96449a') AND ((ID > ?)) ORDER BY ID ASC]; SQL状态[空];错误代码[0];参数编号 1 未设置该值;嵌套异常为 com.microsoft.sqlserver.jdbc.SQLServerException:未设置参数号 1 的值。

如何避免这种情况?

谢谢你

spring spring-batch spring-jdbc
1个回答
0
投票
@PostConstruct
public void init() throws Exception {
    setDataSource(dsSrv.getUserDataSource());
    setPageSize(Integer.parseInt(pageSize));
    setFetchSize(Integer.parseInt(pageSize));
    setQueryProvider(queryProvider(dsSrv.getUserDataSource()));
    setRowMapper(rowMapper());
try {
  afterPropertiesSet();
} catch (Exception e) {
  e.printStackTrace();
}
setSaveState(false);
}

对于异步步骤,必须设置 setSaveState(false),否则您可能会遇到类似的问题

© www.soinside.com 2019 - 2024. All rights reserved.