本帖最后由 rorom 于 2010-05-30 01:15:59 编辑

解决方案 »

  1.   


     if (tcharge.getStatuId() == 1) { // 如果成功
                         System.out.println("成功"+new Date());
                    //计费
                         double[] accComm =new AccountDao().updateAccount(userName, 0, chgComm, conn);
                    System.out.println("计费成功:"+accComm[0]+"  "+accComm[1]);你的{ 只有一半 另一半呢 
      

  2.   

    晕,我竟然没有看明白LZ问的是什么问题?不过看你的打印结果应该是正确的。
    第一次,SQL中的条件:where id in(15,16),对应list长度:2
    第二次,where id =15 ,对应list长度:1
    这样是没有错的呀,前提是你的SQL是符合你的需要的,否则你应该看你的newPaymentDao.findByState(conn); 方法和newPaymentDao.queryType(s_id); 的结果是否符合你的需要。
      

  3.   

    已经贴出来的部分是没有问题的。我感觉是不是LZ没贴的那部分有点问题。
    另外,不要拿一个size=2的List来测试,然后就下结论说:最后一条----,倒数第二条-----。
      

  4.   

    ====SELECT id,statu_id FROM tcharge where id in(15,16) Sun May 30 00:25:40 CST 2010这个输出是通过哪个语句打出来的?
    我怀疑在这个输出语句之前还有一个循环A,这样的话,楼主的代码和输出的逻辑对应是没有什么问题的!!!!
      

  5.   

    sql是在newPaymentDao.queryType(s_id); 里打出来的.
    现在的问题是本来list长度是2,那id为15.16两条数据应该一次性打印出来.
    但是不是的,是16打了2次,然后下次循环才来打15
    也就是说tcharge.getStatuId()经过it.next()之后,居然神奇的没有变化!
      

  6.   

    dao.queryType()返回的List<TchargeBean>不正确,
    猜测一下,代码大概是这样的:TchargeBean tb = new TchargeBean();
    for(int...){
      //如果这里不重新写TchargeBean tb = new TchargeBean();则最后的list中全是id=16的bean,
      //因为TchargeBean 是引用类型,不是基本类型
      tb.setId(...);
      tb.setStatus(...);
      list.add(tb);
    }
      

  7.   

    问题很明显了,你给出的代码是没有问题的,现在就是要确定你给那个list里面的数据是否正确,如果里面的数据就包括两个id=16的数据那么不就找出问题所在了吗,所以
    你直接运行下你的SELECT id,statu_id FROM tcharge where id in(15,16) 看看你查询出来的数据是什么样的
      

  8.   

    数据是正确的,应该是像qianzhimeiying说的那样,一直在装一个对象
      

  9.   

    用迭代器就容易有这种问题,我遇到过两次,后来就干脆不用了,手动循环取List
      

  10.   

    TchargeBean tcharge = null;将 tcharge 的变量作用范围缩小,移至:tcharge = it.next(); 这里,改为:TchargeBean tcharge = it.next();编写代码的原则之一:尽可能地缩小局部变量的作用域。
      

  11.   

    int s_id[] = newPaymentDao.findByState(conn); // 得到所有正在处理的ID序列
    List<TchargeBean> list = newPaymentDao.queryType(s_id); // 返回状态表
    System.out.println("list长度:"+list.size());for(Iterator<TchargeBean> it = list.iterator(); it.hasNext(); ) {
        System.out.println(new Date());
    TchargeBean tcharge = it.next();
        System.out.println("tcharge.getId():"+tcharge.getId());
        System.out.println(userName+" "+telephone+" "+ payMoney);
        if (tcharge.getStatuId() == 1) {    // 如果成功
            System.out.println("成功"+new Date());
            //计费
            double[] accComm =new AccountDao().updateAccount(userName, 0, chgComm, conn);
            System.out.println("计费成功:"+accComm[0]+"  "+accComm[1]);另外,在代码中使用日志工具,而不是 System.out.println
      

  12.   

    int s_id[] = newPaymentDao.findByState(conn); // 得到所有正在处理的ID序列
    List<TchargeBean> list = newPaymentDao.queryType(s_id); // 返回状态表
    System.out.println("list长度:"+list.size());AccountDao accountDao = new AccountDao();  // 这个并不需要在循环中每次去 new
    for(Iterator<TchargeBean> it = list.iterator(); it.hasNext(); ) {
        System.out.println(new Date());
    TchargeBean tcharge = it.next();
        System.out.println("tcharge.getId():"+tcharge.getId());
        System.out.println(userName+" "+telephone+" "+ payMoney);
        if (tcharge.getStatuId() == 1) {    // 如果成功
            System.out.println("成功"+new Date());
            //计费
            double[] accComm = accountDao.updateAccount(userName, 0, chgComm, conn);
            System.out.println("计费成功:"+accComm[0]+"  "+accComm[1]);
      

  13.   

    不知道楼主在说什么
    double[] accComm =new AccountDao().updateAccount(userName, 0, chgComm, conn);
    是做什么呀,这些参数在变化吗?
      

  14.   

    问题解决了,不过我没有花时间去看bean里是不是同样一个对象.猜想是的.
    我改用二维数组装了需要的数据了.
    非常感谢大家!