如何使用IN子句将Jdbc模板用于UPDATE查询?

时间:2014-03-05 12:52:14

标签: sql spring templates jdbc in-clause

我已经通过各种论坛使用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

2 个答案:

答案 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)