gpt4 book ai didi

java - 使用batchUpdate时NamedParameterJdbcTemplate不更新

转载 作者:行者123 更新时间:2023-12-01 18:29:04 24 4
gpt4 key购买 nike

我有另一个服务提供的对象列表,我用它来更新我自己的数据。当我尝试使用 NamedParameterJdbcTemplate.batchUpdate 时,所有返回值均为零。

public void updateWeather(List<Weather> weatherList) {
String query = "UPDATE weather \n" +
"SET rain_probability = ROUND(:rainProbability, 4), \n" +
"wind_speed = :windSpeed \n" +
"WHERE city_id = :cityId AND date = :date;";

List<MapSqlParameterSource> batchList = new ArrayList<>();

for(Weather weather : weatherList) {
MapSqlParameterSource params = new MapSqlParameterSource();
params.addValue("rainProbability", weather.getRainProbability());
params.addValue("windSpeed", weather.getWindSpeed());
params.addValue("cityId", weather.getCityId());
params.addValue("date", weather.getDate());
batchList.add(params);
}

this.namedParameterJdbcParameter
.batchUpdate(query, batchList.toArray(new MapSqlParameterSource[] {});
}

如果我直接在数据库中运行这个UPDATE,它就可以正常工作。此外,如果我一项一项地运行它,即替换值(而不是将参数源添加到 batchList 中),它也可以工作。

例如:

for (Weather weather : weatherList) {
String query = String.format("UPDATE weather \n" +
"SET rain_probability = ROUND('%d', 4), \n" +
" wind_speed = %d \n" +
" WHERE city_id = :cityId AND date = :date;",
weather.getRainProbability(),
weather.getWindSpeed(),
weather.getCityId(),
weather.getDate()
);

this.namedParameterJdbcTemplate.update(query, Collections.emptyMap());
}

对我做错了什么有什么建议吗?

最佳答案

是使用“\n”还是“;”在字符串内的语句末尾? (我很惊讶您在实际查询字符串中没有遇到带有 ; 的 SQL 语法异常)

此外,日期总是有点棘手,如果转换不正确,那么您的 WHERE 子句将不会匹配,这可能就是返回 0 行的原因。您可以暂时尝试将日期转换为字符串并查看计数是否正确(例如对于 Oracle:AND date = TO_DATE(:dateStr, 'DD/MM/YYYY') )

关于java - 使用batchUpdate时NamedParameterJdbcTemplate不更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60190684/

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