我已经通过各种论坛使用spring的namedParamJdbcTemplate处理IN子句,但我仍然没有得到我正在寻找的东西。 以下是我的问题:
我有以下方法:
public void updateBatchTableForStatus(List<Integer> reportShellIds, String scheduleType) {
Map<String,List<Integer>> shellIds = Collections.singletonMap("reportShellIds", reportShellIds);
MapSqlParameterSource parameters = new MapSqlParameterSource();
parameters.addValue("reportShellIds", shellIds, Types.NUMERIC)
parameters.addValue("eventType", scheduleType, Types.VARCHAR);
this.namedParamJdbcTemplate.update(GET_EVENT_METADATA_INFO, parameters);
}
上述方法中提到的查询定义如下:
public static final String SQL_UPDATE_BATCH_LOOKUP_TABLE_FOR_STATUS_BY_BATCH_IDS = "" +
"UPDATE " +
TABLE_BATCH_REF + " BLK " +
"SET " +
"BLK.EXECUTION_STATUS_CODE = :eventType " +
"WHERE " +
"BLK.BATCH_ID in(:reportShellIds) ";
BATCH_ID列的数据类型为Number(24,0),EXECUTION_STATUS_CODE列为Varchar。 我正在使用Oracle db。
但是,上述方法会引发SQL异常。
有人可以告诉我我错在哪里以及它的修复方法是什么?
非常感谢提前。
最诚挚的问候 LB
答案 0 :(得分:0)
您正在将reportShellIds
绑定到Map,但它必须是Spring的List才能正确绑定它。也许您的意思是shellIds.values()
或变量reportShellIds
?
答案 1 :(得分:0)
您可以使用简单Map<String,Object>
的其他方法,并将数组按原样放入参数映射
public int update(String sql, java.util.Map<java.lang.String,?> paramMap)