使用Spring jdbctemplate执行更新

时间:2014-05-06 10:40:41

标签: java spring jdbc jdbctemplate

请建议使用jdbctemplate执行以下查询的方法。

update student set result='pass' where stud_id in (100,101,102);

我已尝试过以下内容,但仍然使用了无效的列类型。

我正在通过

String query = "UPDATE STUDENT SET RESULT = ? WHERE OBJ_ID IN ( SELECT * FROM TABLE )";
int[] stud_ids = new int[]{100,101,102};

  getJdbcTemplate().query(updateStateSQL, new PreparedStatementSetter() {

    @Override
    public void setValues(PreparedStatement ps) throws SQLException {
      final Connection con = getJdbcTemplate().getNativeJdbcExtractor().getNativeConnection(ps.getConnection());
      ps.setString(1, 'PASS');
      ps.setArray(2, stud_ids);
    }
  }, new RowMapper<String>() {

    @Override
    public String mapRow(ResultSet rs, int arg1) throws SQLException {
      return rs.getString(1);
    }
  });
}

1 个答案:

答案 0 :(得分:0)

您写道:

String query = "UPDATE STUDENT SET RESULT = ? WHERE OBJ_ID IN ( SELECT * FROM TABLE )";

getJdbcTemplate().query(updateStateSQL, ...)

您没有写出updateStateSQL的值。如果它与query相同,那么这不起作用:

ps.setString(1, 'PASS');
ps.setArray(2, stud_ids);

因为您在查询中只需要2个问号(?),并且您的帖子中只有一个。

你可以试试这个:

String query = "UPDATE STUDENT SET RESULT = ? WHERE OBJ_ID IN ( ? )";

但说实话,我从未使用过ps.setArray,而且我不确定它会按照您的预期行事。

的工作原理是使用NamedParameterJdbcTemplate,如下所示:

String sql = "UPDATE STUDENT SET RESULT = :result WHERE OBJ_ID IN ( :ids )";
Map<String, Object> params = new HashMap<String, Object>();
params.put("result", "PASS");
params.put("ids", Arrays.asList(new Integer[] {100, 101, 102}));
getSimpleJdbcTemplate().update(sql, params);