如何处理 ItemWriter 中的参数化 sql 查询?
How do I handle parameterized sql query in ItemWriter?
试图找出如何在 ItemWriter class 中使用参数化 sql 更新查询 class。
我看到错误:
Invalid parameter 1: Parameter index is out of range. ERRORCODE=-4461, SQLSTATE=42815
public class MyWriter implements ItemWriter<Assessment> {
private NamedParameterJdbcTemplate namedJdbcTemplate;
private static final String INSERT_QUERY = "UPDATE TABLE SET COLUMN = :var1, COLUMN2 = :var2 WHERE COLUMN = 'TEST'";
public ExpireAssessmentWriter(DataSource dataSource) {
this.namedJdbcTemplate = new NamedParameterJdbcTemplate(dataSource);
}
@Override
public void write(List<? extends Assessment> list) throws Exception {
for (Assessment assessment : list) {
Map<String, Object> paramMap = new HashMap<String, Object>();
paramMap.put("var1", assessment.getVar1());
paramMap.put("var2", assessment.getVar2());
namedJdbcTemplate.update(INSERT_QUERY, paramMap);
throw new IllegalStateException("Something went wrong!");
}
}
}
我正在创建一个自定义编写器以便写入三个不同的表,但使用 namedJdbcTemplate 时出现错误
我不明白你为什么要为此创建自定义编写器。 Spring批处理提供的JdbcBatchItemWriter
已经支持命名参数。
您可以在 JdbcBatchItemWriterBuilderTests 中找到几个示例。
试图找出如何在 ItemWriter class 中使用参数化 sql 更新查询 class。
我看到错误:
Invalid parameter 1: Parameter index is out of range. ERRORCODE=-4461, SQLSTATE=42815
public class MyWriter implements ItemWriter<Assessment> {
private NamedParameterJdbcTemplate namedJdbcTemplate;
private static final String INSERT_QUERY = "UPDATE TABLE SET COLUMN = :var1, COLUMN2 = :var2 WHERE COLUMN = 'TEST'";
public ExpireAssessmentWriter(DataSource dataSource) {
this.namedJdbcTemplate = new NamedParameterJdbcTemplate(dataSource);
}
@Override
public void write(List<? extends Assessment> list) throws Exception {
for (Assessment assessment : list) {
Map<String, Object> paramMap = new HashMap<String, Object>();
paramMap.put("var1", assessment.getVar1());
paramMap.put("var2", assessment.getVar2());
namedJdbcTemplate.update(INSERT_QUERY, paramMap);
throw new IllegalStateException("Something went wrong!");
}
}
}
我正在创建一个自定义编写器以便写入三个不同的表,但使用 namedJdbcTemplate 时出现错误
我不明白你为什么要为此创建自定义编写器。 Spring批处理提供的JdbcBatchItemWriter
已经支持命名参数。
您可以在 JdbcBatchItemWriterBuilderTests 中找到几个示例。