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); }
问题很明显了,你给出的代码是没有问题的,现在就是要确定你给那个list里面的数据是否正确,如果里面的数据就包括两个id=16的数据那么不就找出问题所在了吗,所以 你直接运行下你的SELECT id,statu_id FROM tcharge where id in(15,16) 看看你查询出来的数据是什么样的
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]);你的{ 只有一半 另一半呢
第一次,SQL中的条件:where id in(15,16),对应list长度:2
第二次,where id =15 ,对应list长度:1
这样是没有错的呀,前提是你的SQL是符合你的需要的,否则你应该看你的newPaymentDao.findByState(conn); 方法和newPaymentDao.queryType(s_id); 的结果是否符合你的需要。
另外,不要拿一个size=2的List来测试,然后就下结论说:最后一条----,倒数第二条-----。
我怀疑在这个输出语句之前还有一个循环A,这样的话,楼主的代码和输出的逻辑对应是没有什么问题的!!!!
现在的问题是本来list长度是2,那id为15.16两条数据应该一次性打印出来.
但是不是的,是16打了2次,然后下次循环才来打15
也就是说tcharge.getStatuId()经过it.next()之后,居然神奇的没有变化!
猜测一下,代码大概是这样的:TchargeBean tb = new TchargeBean();
for(int...){
//如果这里不重新写TchargeBean tb = new TchargeBean();则最后的list中全是id=16的bean,
//因为TchargeBean 是引用类型,不是基本类型
tb.setId(...);
tb.setStatus(...);
list.add(tb);
}
你直接运行下你的SELECT id,statu_id FROM tcharge where id in(15,16) 看看你查询出来的数据是什么样的
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
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]);
double[] accComm =new AccountDao().updateAccount(userName, 0, chgComm, conn);
是做什么呀,这些参数在变化吗?
我改用二维数组装了需要的数据了.
非常感谢大家!