一个价值几个小时的BUG -- 处理循环
2009-11-04 06:53
405 查看
总结,一定要让整个内存循环执行完!!!
改过的代码:
ArrayList<UserInfo> userList = new ArrayList<UserInfo>();
ArrayList<UserInfo> userListCompare= this.Equipment.getUserList();//暂存更改以前的userlist里面的用户信息 ,比较用
for(int i=0;i<this.JtEquipmentUser.getRowCount();i++)
{
UserInfo u=new UserInfo();
for(int k=0;k<userListCompare.size();k++)
{
System.out.println("比较值 :‘"+this.JtEquipmentUser.getValueAt(i, 0).toString()+"':'"+userListCompare.get(k).getUid()+"':"+this.JtEquipmentUser.getValueAt(i, 0).toString().trim().equals(userListCompare.get(k).getUid().trim()));
if(this.JtEquipmentUser.getValueAt(i, 0).toString().trim().equals(userListCompare.get(k).getUid().trim()))
{
u.setuserOpFlag("modify");
break;//如果以前有这个用户名称 ,认为是修改 执行update 语句 ,否则 认为是新添加的用户执行 insert 语句
}
else if(k==userListCompare.size()-1)
{
u.setuserOpFlag("add");
break; //如果以前有这个用户名称 ,认为是修改 执行update 语句 ,否则 认为是新添加的用户执行 insert 语句
}
else
{
continue;
}
}
Object obj=this.JtEquipmentUser.getValueAt(i, 0);
if(!obj.equals(null))
{
u.setEquipmentid(jtxtEquipId.getText().trim());
u.setUid(this.JtEquipmentUser.getValueAt(i, 0).toString());
u.setUserType(this.JtEquipmentUser.getValueAt(i,2).toString());
u.setPwd(this.JtEquipmentUser.getValueAt(i, 1).toString());
}
userList.add(u);
// u.setuserOpFlag("add");
}
Equipment.setUserList(userList);
ArrayList<ItemInfo> itemList=new ArrayList<ItemInfo>();
for(int l=0;l<this.JTEquipmentItem.getRowCount();l++)
{
ItemInfo itif=new ItemInfo();
Object obj1=this.JTEquipmentItem.getValueAt(l, 0);
if(!obj1.equals(null))
{
itif.setEquipmentID(Equipment.getEquipmentId()); //设备id
itif.setitemName(this.JTEquipmentItem.getValueAt(l, 0).toString());
itif.setUid(this.JTEquipmentItem.getValueAt(l, 1).toString());
itif.setMaxValue(Double.parseDouble(this.JTEquipmentItem.getValueAt(l, 2).toString()));
itif.setMinValue(Double.parseDouble(this.JTEquipmentItem.getValueAt(l, 3).toString()));
itif.setAvgValue(Double.parseDouble(this.JTEquipmentItem.getValueAt(l, 4).toString()));
}
itemList.add(itif);
}
Equipment.setitemList(itemList);
开始的时候, 代码 《循环部分的》
后来的内陈循环:
for(int k=0;k<userListCompare.size();k++)
{
System.out.println("比较值 :‘"+this.JtEquipmentUser.getValueAt(i, 0).toString()+"':'"+userListCompare.get(k).getUid()+"':"+this.JtEquipmentUser.getValueAt(i, 0).toString().trim().equals(userListCompare.get(k).getUid().trim()));
if(this.JtEquipmentUser.getValueAt(i, 0).toString().trim().equals(userListCompare.get(k).getUid().trim()))
{
u.setuserOpFlag("modify");
break;//如果以前有这个用户名称 ,认为是修改 执行update 语句 ,否则 认为是新添加的用户执行 insert 语句
}
********************加颜色的是控制内层代码执行完的************************
else if(k==userListCompare.size()-1)
{
u.setuserOpFlag("add");
break; //如果以前有这个用户名称 ,认为是修改 执行update 语句 ,否则 认为是新添加的用户执行 insert 语句
}
else
{
continue;
}
}
********************加颜色的是控制内层代码执行完的************************
开始的内存循环:
for(int k=0;k<userListCompare.size();k++)
{
System.out.println("比较值 :‘"+this.JtEquipmentUser.getValueAt(i, 0).toString()+"':'"+userListCompare.get(k).getUid()+"':"+this.JtEquipmentUser.getValueAt(i, 0).toString().trim().equals(userListCompare.get(k).getUid().trim()));
if(this.JtEquipmentUser.getValueAt(i, 0).toString().trim().equals(userListCompare.get(k).getUid().trim()))
{
u.setuserOpFlag("modify");
break;//如果以前有这个用户名称 ,认为是修改 执行update 语句 ,否则 认为是新添加的用户执行 insert 语句
}
else
{
u.setuserOpFlag("add");
break; //如果以前有这个用户名称 ,认为是修改 执行update 语句 ,否则 认为是新添加的用户执行 insert 语句
}
}
对比发现 :我的开始的内陈循环没有执行完,就跳出循环,把操作符改成了 ,insert 即为每一次都是插入数据,导致我每一次修改 都是 插入数据,数据急剧增加!!!
呵呵后来 ,改成了上面做标记的代码了。最关键的是要控制内陈循环执行完!!!
改过的代码:
ArrayList<UserInfo> userList = new ArrayList<UserInfo>();
ArrayList<UserInfo> userListCompare= this.Equipment.getUserList();//暂存更改以前的userlist里面的用户信息 ,比较用
for(int i=0;i<this.JtEquipmentUser.getRowCount();i++)
{
UserInfo u=new UserInfo();
for(int k=0;k<userListCompare.size();k++)
{
System.out.println("比较值 :‘"+this.JtEquipmentUser.getValueAt(i, 0).toString()+"':'"+userListCompare.get(k).getUid()+"':"+this.JtEquipmentUser.getValueAt(i, 0).toString().trim().equals(userListCompare.get(k).getUid().trim()));
if(this.JtEquipmentUser.getValueAt(i, 0).toString().trim().equals(userListCompare.get(k).getUid().trim()))
{
u.setuserOpFlag("modify");
break;//如果以前有这个用户名称 ,认为是修改 执行update 语句 ,否则 认为是新添加的用户执行 insert 语句
}
else if(k==userListCompare.size()-1)
{
u.setuserOpFlag("add");
break; //如果以前有这个用户名称 ,认为是修改 执行update 语句 ,否则 认为是新添加的用户执行 insert 语句
}
else
{
continue;
}
}
Object obj=this.JtEquipmentUser.getValueAt(i, 0);
if(!obj.equals(null))
{
u.setEquipmentid(jtxtEquipId.getText().trim());
u.setUid(this.JtEquipmentUser.getValueAt(i, 0).toString());
u.setUserType(this.JtEquipmentUser.getValueAt(i,2).toString());
u.setPwd(this.JtEquipmentUser.getValueAt(i, 1).toString());
}
userList.add(u);
// u.setuserOpFlag("add");
}
Equipment.setUserList(userList);
ArrayList<ItemInfo> itemList=new ArrayList<ItemInfo>();
for(int l=0;l<this.JTEquipmentItem.getRowCount();l++)
{
ItemInfo itif=new ItemInfo();
Object obj1=this.JTEquipmentItem.getValueAt(l, 0);
if(!obj1.equals(null))
{
itif.setEquipmentID(Equipment.getEquipmentId()); //设备id
itif.setitemName(this.JTEquipmentItem.getValueAt(l, 0).toString());
itif.setUid(this.JTEquipmentItem.getValueAt(l, 1).toString());
itif.setMaxValue(Double.parseDouble(this.JTEquipmentItem.getValueAt(l, 2).toString()));
itif.setMinValue(Double.parseDouble(this.JTEquipmentItem.getValueAt(l, 3).toString()));
itif.setAvgValue(Double.parseDouble(this.JTEquipmentItem.getValueAt(l, 4).toString()));
}
itemList.add(itif);
}
Equipment.setitemList(itemList);
开始的时候, 代码 《循环部分的》
后来的内陈循环:
for(int k=0;k<userListCompare.size();k++)
{
System.out.println("比较值 :‘"+this.JtEquipmentUser.getValueAt(i, 0).toString()+"':'"+userListCompare.get(k).getUid()+"':"+this.JtEquipmentUser.getValueAt(i, 0).toString().trim().equals(userListCompare.get(k).getUid().trim()));
if(this.JtEquipmentUser.getValueAt(i, 0).toString().trim().equals(userListCompare.get(k).getUid().trim()))
{
u.setuserOpFlag("modify");
break;//如果以前有这个用户名称 ,认为是修改 执行update 语句 ,否则 认为是新添加的用户执行 insert 语句
}
********************加颜色的是控制内层代码执行完的************************
else if(k==userListCompare.size()-1)
{
u.setuserOpFlag("add");
break; //如果以前有这个用户名称 ,认为是修改 执行update 语句 ,否则 认为是新添加的用户执行 insert 语句
}
else
{
continue;
}
}
********************加颜色的是控制内层代码执行完的************************
开始的内存循环:
for(int k=0;k<userListCompare.size();k++)
{
System.out.println("比较值 :‘"+this.JtEquipmentUser.getValueAt(i, 0).toString()+"':'"+userListCompare.get(k).getUid()+"':"+this.JtEquipmentUser.getValueAt(i, 0).toString().trim().equals(userListCompare.get(k).getUid().trim()));
if(this.JtEquipmentUser.getValueAt(i, 0).toString().trim().equals(userListCompare.get(k).getUid().trim()))
{
u.setuserOpFlag("modify");
break;//如果以前有这个用户名称 ,认为是修改 执行update 语句 ,否则 认为是新添加的用户执行 insert 语句
}
else
{
u.setuserOpFlag("add");
break; //如果以前有这个用户名称 ,认为是修改 执行update 语句 ,否则 认为是新添加的用户执行 insert 语句
}
}
对比发现 :我的开始的内陈循环没有执行完,就跳出循环,把操作符改成了 ,insert 即为每一次都是插入数据,导致我每一次修改 都是 插入数据,数据急剧增加!!!
呵呵后来 ,改成了上面做标记的代码了。最关键的是要控制内陈循环执行完!!!
相关文章推荐
- MS的一个BUG折腾我几个小时!
- 一个ArcGIS Javascript API的BUG和处理办法 - 调用两次Draw工具条deactivate方法导致的错误
- 【反思】一个价值两天的BUG,无论工作还是学习C语言的朋友都看看吧!
- 一个SQL的bug:值为null的字段处理
- 12-21 完成了公司的一个bug 想头 学习了 消息处理机制
- Octopus系列之HttpCustom2.0模板引擎的处理,一个bug的分析
- MFC中消息循环处理的几个函数之间的区别
- 如何处理一个未知的BUG
- IE处理GIF动画图片onload事件的一个BUG
- 曲线解决CMFCPropertyGridCtrl掩码的bug2009年12月30日 星期三 下午 01:24CMFCPropertyGridCtrl这个控件当用到掩码时,会有问题.解决办法用其他掩码替代.下面是一个IP掩码处理方法.代码如下
- java hibernate关联查询返回一个集合,转换成json报json死循环处理
- 一个帮助你处理延迟,重复,循环操作的jQuery插件 - timing
- javaBUG处理,关于保存表单信息多了一个,逗号 。
- LVS负载均衡软件在处理Netfilter/iptables连接状态跟踪机制时遇到的一个bug的说明
- 处理字符串的时候遇到的一个小bug,但是一整天都没发现的bug
- 昂,弄了Vmware虚拟机和笔记本无线上网桥接的问题 弄了几个小时 找了一个文章 分享下
- 关于处理try-catch循环一次异常,次次异常的一个例子
- fastreport v4.7.5版本中,一个资源处理bug
- 在C#异常处理中,一个try可以有几个通用catch块?
- SQL2005 Anerlysis Service的处理维度中一个BUG的分析