繁体   English   中英

使用Spring jdbctemplate执行更新

[英]Perform Update using Spring 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);
    }
  });
}

你写了:

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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM