求大神指教!!!为什么用for循环往数据库插数据只能插入第一条?

weixin_42123467 2018-06-28 05:45:26
public void saveLook(Promote promote){
int a = 0;
User user = UserUtils.getUser();
if (StringUtils.isNotBlank(user.getId())){
promote.setCreateBy(user);;
}
List<User> userList=new ArrayList<User>();
String[] department=promote.getSuitDepartment().split(",");
for(int i=0;i<department.length;i++){
List<User> list=systemService.findUserByOfficeId(department[i]);
userList.addAll(list);
}
for(int i=0;i<userList.size();i++){
Promote promote1=new Promote();
promote1.preInsert();
promote1.setTheme(promote.getTheme());
promote1.setContent(promote.getContent());
promote1.setEffectTime(promote.getEffectTime());
promote1.setSuitDepartment(promote.getSuitDepartment());
promote1.setSeePeople(userList.get(i).getLoginName());
promote1.setTendingId(promote.getTendingId());
this.promoteDao.savePromoteLook(promote1);
}
}
...全文
797 点赞 收藏 13
写回复
13 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
木子-轩 2018-09-18
for(int i=0;i<userList.size();i++){
Promote promote1=(Promote )userList.get(i);
promote1.preInsert();
promote1.setTheme(promote.getTheme());
promote1.setContent(promote.getContent());
promote1.setEffectTime(promote.getEffectTime());
promote1.setSuitDepartment(promote.getSuitDepartment());
promote1.setSeePeople(userList.get(i).getLoginName());
promote1.setTendingId(promote.getTendingId());
this.promoteDao.savePromoteLook(promote1);
}

或者你直接定义一个集合
List<Promote > pList = new ArrayList<Promote >
把你的
Promote promote1=(Promote )userList.get(i); 结果放进去,
写个批量处理的方法去插入,那样效果会更快的
回复
hubuwx 2018-09-15
声明并实例化对象放在循环体里面就好了
回复
潘少丶 2018-07-10
数据库调皮引起的、目测是
回复
weixin_42123467 2018-06-29
update是1的话就是成功的,0是未成功的
回复
weixin_42123467 2018-06-29


回复
两个猕猴桃 2018-06-29
自动生成id的方法生成的ID是否重复,检查一下。
回复
两个猕猴桃 2018-06-29
如果for循环只能插入第一条的话,一般是数据约束违反问题,比如主键等唯一列。或者触发了触发器规则。但你没报异常。。。
如果有sql,但数据库没插进去,一般是事物没有提交,但你第一条已经插入了。。。

看看你看得数据库表和程序连的表是不是一个。

正常的话SQL发过去并且不报错,数据库是能插入的。
因为不管是什么框架,SQL已经发过去了,数据库就要执行,就算是回滚也是回滚所有记录。

再检查一下代码和数据库连接。
回复
weixin_42123467 2018-06-29
1.userList.size()是5
2.试过了,没有异常
3.是一个自动生成id的方法
4.每执行一次 this.promoteDao.savePromoteLook(promote1);已经生成了sql语句,但是不往数据库插
回复
weixin_42123467 2018-06-29
多谢,现在已经能存进去了,而我什么都没改。。。
回复
两个猕猴桃 2018-06-29
你不会是把insert语句给缓存了吧?
回复
两个猕猴桃 2018-06-29
第一条返回1,成功插入
后面的都是返回0,表示数据没更新。
中间的using existing EHcache 有点可疑。
看看EHcache 配置有没有问题。
回复
再见爱情 2018-06-29
截图也不截全一点
你看看是不是using existing EHcache named这个是报异常
导致的事物回滚
回复
两个猕猴桃 2018-06-28
1.把userList.size()打印出来看看
2.try catch 一下 this.promoteDao.savePromoteLook(promote1); 看看有没有异常
3.promote1.preInsert()是干吗的?
回复
相关推荐
发帖
Web 开发
创建于2007-09-28

8.0w+

社区成员

Java Web 开发
申请成为版主
帖子事件
创建了帖子
2018-06-28 05:45
社区公告
暂无公告