请建议使用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);
}
});
}
答案 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);