while(rs.next())
{

Iterator iter = all.iterator();
while (iter.hasNext()) {
Plan p = (Plan) iter.next();
String id = p.getOtherFlag();
if(rs.getString("otherflag").equals(id))
{
System.out.println("存在相同");
}
else
{
//根据查找到符合条件的otherflag找到主表项
String sql_res = "select * from administrator.tdphtmp where otherflag='"+ rs.getString("otherflag") +"'";
System.out.println(sql_res);
PreparedStatement pstmt_res = null ;
try
{
pstmt_res = dbc.getConnection().prepareStatement(sql_res) ;
ResultSet rs_res = pstmt_res.executeQuery() ;
while(rs_res.next())
{
Plan plan = new Plan() ;
//plan.setId(rs.getInt("id"));
plan.setDwbm_name(rs_res.getString("dwbm_name"));
plan.setTxr(rs_res.getString("txr")) ;
plan.setTxrq(rs_res.getDate("txrq")) ;
plan.setDdselect(rs_res.getString("ddselect")) ;
plan.setDd(rs_res.getString("dd"));
plan.setTdsbfw(rs_res.getString("tdsbfw"));
plan.setLb(rs_res.getString("lb"));
plan.setGznr(rs_res.getString("gznr"));
plan.setJhksrq(rs_res.getDate("jhksrq"));
plan.setJhjsrq(rs_res.getDate("jhjsrq"));
plan.setTs(rs_res.getString("ts"));
plan.setWorktimesure(rs_res.getString("worktimesure"));
plan.setBz(rs_res.getString("bz"));
plan.setSjzt(rs_res.getString("sjzt"));
plan.setScbj(rs_res.getString("scbj"));
plan.setOtherFlag(rs_res.getString("otherflag"));
plan.setOtherFlag2(rs_res.getString("otherflag2"));
all.add(plan) ;
}
rs_res.close() ;
pstmt_res.close() ;
}
catch (Exception e)
{
System.out.println("query出现错误"+e) ;
}
}
}

}
rs.close() ;
pstmt.close() ;
}

解决方案 »

  1.   

    Collection线程同步的原因,使用同步集合,
    迭代时要加同步锁。
      

  2.   

    机子上没有jre
    不能帮你试
    原因是因为你一边遍历一边修改造成的
    改成iterator的方法就行了
      

  3.   

    http://www.javaeye.com/topic/124788
    找到了,前2天刚看过
      

  4.   

    即使是单线程的,如果在迭代时直接调用all的remove方法,而不是调用iter的remove方法,也会抛这个异常。
      

  5.   

    先包装一下
    list = Collections.synchronizedList(list);然后
    synchronized(list){
    迭代过程}
      

  6.   

    按照红字修改也报错啊while(rs.next()) 
    { Iterator iter = all.iterator(); 
    while (iter.hasNext()) { 
    Plan p = (Plan) iter.next(); 
    String id = p.getOtherFlag(); 
    if(rs.getString("otherflag").equals(id)) 

    System.out.println("存在相同"); 

    else 

    //根据查找到符合条件的otherflag找到主表项 
    String sql_res = "select * from administrator.tdphtmp where otherflag='"+ rs.getString("otherflag") +"'"; 
    System.out.println(sql_res); 
    PreparedStatement pstmt_res = null ; 
    try 

    pstmt_res = dbc.getConnection().prepareStatement(sql_res) ; 
    ResultSet rs_res = pstmt_res.executeQuery() ; 
    while(rs_res.next()) 

    Plan plan = new Plan() ; 
    //plan.setId(rs.getInt("id")); 
    plan.setDwbm_name(rs_res.getString("dwbm_name")); 
    plan.setTxr(rs_res.getString("txr")) ; 
    plan.setTxrq(rs_res.getDate("txrq")) ; 
    plan.setDdselect(rs_res.getString("ddselect")) ; 
    plan.setDd(rs_res.getString("dd")); 
    plan.setTdsbfw(rs_res.getString("tdsbfw")); 
    plan.setLb(rs_res.getString("lb")); 
    plan.setGznr(rs_res.getString("gznr")); 
    plan.setJhksrq(rs_res.getDate("jhksrq")); 
    plan.setJhjsrq(rs_res.getDate("jhjsrq")); 
    plan.setTs(rs_res.getString("ts")); 
    plan.setWorktimesure(rs_res.getString("worktimesure")); 
    plan.setBz(rs_res.getString("bz")); 
    plan.setSjzt(rs_res.getString("sjzt")); 
    plan.setScbj(rs_res.getString("scbj")); 
    plan.setOtherFlag(rs_res.getString("otherflag")); 
    plan.setOtherFlag2(rs_res.getString("otherflag2")); 
    iter.remove();
    all.add(plan) ; 

    rs_res.close() ; 
    pstmt_res.close() ; 

    catch (Exception e) 

    System.out.println("query出现错误"+e) ; 


    } } 
    rs.close() ; 
    pstmt.close() ; 
    }
      

  7.   

    看看我的这个帖子对你肯定有帮助:关于Java API中文文档一些术语的疑问
      

  8.   

    请楼主看看java.util.concurrent包关于线程的高级管理的类库