gpt4 book ai didi

mysql - Spring JDBCTemplate 更新多行

转载 作者:行者123 更新时间:2023-11-28 23:35:16 25 4
gpt4 key购买 nike

我想使用具有修复值的 JDBCTemplate 更新多行,仅使用一条语句。我的函数获取一个 id 列表,我使用 Guava 的 Joiner 将它们连接成一个字符串。当我尝试调用 JDBCTemplate 的更新函数时,使用连接的 id 作为参数,它只更新第一个元素,就好像在最终查询中以某种方式在某处注入(inject)了“限制 1”。

private int increase(final List<Long> ids){
String query = "UPDATE mytable" +
" SET count = count + 1," +
" last_modified = NOW()" +
" WHERE id IN ( ? )";
Object[] args = {Joiner.on(",").join(ids)};
return jdbcTemplate.update(query, args);
}

我的代码有问题吗?我使用错误的方法吗?这是库中的错误吗?我应该只连接查询中的 ID,而不是将它们作为参数发送吗?

最佳答案

下面是Spring中的实现方式。

使用 JdbcTemplate

batchUpdate(String sql, BatchPreparedStatementSetter pss)

private void increase(List<Long> ids){
String query = "UPDATE mytable" +
" SET count = count + 1," +
" last_modified = NOW()" +
" WHERE id = ?";
getJdbcTemplate().batchUpdate(query,new BatchPreparedStatementSetter() {

@Override
public void setValues(PreparedStatement ps, int i) throws SQLException {
ps.setLong(1, ids.get(i));
}

@Override
public int getBatchSize() {
return ids.size();
}
});

}

检查 this post看看它是否让您更清楚。

关于mysql - Spring JDBCTemplate 更新多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35903834/

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