gpt4 book ai didi

java - 使用 Spring jdbctemplate 执行更新

转载 作者:行者123 更新时间:2023-11-29 08:49:27 25 4
gpt4 key购买 nike

请建议一些使用 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);

关于java - 使用 Spring jdbctemplate 执行更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23492410/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com