java代码片段
Map<String, Object> params =new HashMap<>();
params.put("users", "张三,李四,王五,李六");//此为前端传入参数
String[] users = params.get("users").toString().split(",");
for (int i = 0; i < users .length; i++) {
params.put("old_dis_status", "0");
params.put("new_dis_status", "1");
params.put("user", users[i]);
//更新
int c = tUserMapper.upState(params);
if (c == 0) {
System.out.println("错误");
}
}
sql片段
update user_info
set dis_status=#{map.new_dis_status},time=now()
where user=#{map.user} and dis_status=#{map.old_dis_status}
表数据及结构
id(主键自增) | user(唯一)| time | dis_status
1 | 张三 |(NULL) | 0
2 | 李四 |(NULL) | 0
3 | 王五 |(NULL) | 0
4 | 李六 |(NULL) | 0
前两次循环都能正常返回1条受影响,到了第三次就出现更新条数为0
但是用更新条数为0的参数,重新在数据库中单独执行却能显示1条受影响
这种问题需要如何解决?
把if (i != 1)改成if(i==0)
因为有时候参数不正确,可能导致更新多条,不止一条
此外,你是如何拿到有问题的参数的,断点跟的吗,你这里不是直接拼接的sql语句,而是使用了参数化sql,按理说应该没办法直接拷贝出来执行的,需要手动改造一下,有没有一种可能,其实有参数传错了,但是你手改的时候又给改对了,所以能执行了呢
此外,仔细看你连接的到底是哪个数据库,是不是代码自动插入的和你用工具插入的不是同一个库
就你贴出来的这个代码 肯定是跑不起来的,第一句
Map<String, Object> params =new ArrayList<Map<String, Object>>(); 这儿就已经编译报错了