日期:2014-05-20  浏览次数:20640 次

跪求答案。。
for(Item it:list){

sqll="select dbh from dbxx where yhh='"+it.getYhh()+"'";
try {
pstmm= cm2.prepareStatement(sqll);
ResultSet rs=pstmm.executeQuery();
while(rs.next()) {
Biaohao bh=new Biaohao();
bh.setDbh(rs.getString("dbh"));
list0.add(bh);


}
if( list0.size()>1){

// for(int i=0;i<list0.size();i++){
// String sql0="select z_dl from dbxx where dbh='"+list0.get(i)+"'and yhh='"+it.getYhh()+"'";
// PreparedStatement pstm0=cm2.prepareStatement(sql0);
// ResultSet rs0=pstm0.executeQuery();
// while(rs0.next()){
// DianL dl=new DianL();
// dl.setZ_dl(rs0.getFloat("z_dl"));
// list1.add(dl);
// }
//
// }
System.out.print("for is over");

sql1="select device_id from lowtshow where user_id='"+it.getYhh()+"'";
pstm1=cm.prepareStatement(sql1);
ResultSet rs1=pstm1.executeQuery();
while(rs1.next()){
Device_id did=new Device_id();
did.setDevice_id(rs1.getString("device_id"));
list2.add(did);

}
for(int j=0;j<list2.size();j++){
for(int z=0;z<list1.size();z++){
sql2="update lowtshow set see_show=" +list1.get(z)+
" where device_id='"+list2.get(j)+"'and user_id='"+it.getYhh()+"'";
pstm2=cm.prepareStatement(sql2);
pstm2.executeUpdate();
}
}
System.out.print(123);
}




} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}
System.out.print(456);

}

为什么注释掉的那部分 不注释的时候 就死循环了,打印不出456,注释掉后就能出来。为什么?而且那部分没有死循环,能出来。123也能打印出来

------解决方案--------------------
未必是死循环,可能是后面的双重循环次数太多,短时间执行不出来而已。因为你注释的那部分,为list1增加了元素,但增加了多少个是不清楚的。

建议你修改:
System.out.print("for is over");
为:
System.out.println("for is over, list1: " + list1.size());

然后在:
for(int j=0;j<list2.size();j++){
for(int z=0;z<list1.size();z++){
这两句话之前,增加:
System.out.println("list2: " + list2.size() + "\tTotal: " + (list1.size()* list2.size());


然后麻烦说下打印的内容是啥,谢谢。