java 使 用 分 页 分 析 完 数 据 进 行 标 志 修 改 完 成,存在的问题

1.问题描述:通过分页加载A表中的数据,每分析完一页,将本页的分析成功的数据id去修改A表中对应id记录的flag标志,表示已经成功分析了。

出现的问题是:假设有11条数据:


核心代码如下:

public static void main(String[] args) {

int totalCount=getGraphRelationDataCount("");//查询需要分析数据的条数
   int pageSize=2;//每页条数
   int pageTotal=totalCount%pageSize==0?totalCount/pageSize:totalCount/pageSize+1;

  for(int page=1;page<=pageTotal;page++){
  List<EntityRelation> rrList=getGraphRelationDataByDb(page, pageSize);
  
  updateAnalysisDataFlag(rrList);
  System.out.println("第"+page+"页执行完毕!!!");
  }
}

查询记录数sql:

select count(id) from st_test where flag!=2

查询每一页数据:

select * from st_test where flag!=2 limit ?,?

修改每一页数据:

String sql="update st_test set flag='2' where id=?";

运行结果是:

Initialize dbcp...
本次分析条数为:11
第1页执行完毕!!!
第2页执行完毕!!!
第3页执行完毕!!!
4连接失效!!!!
第4页执行完毕!!!
5连接失效!!!!
第5页执行完毕!!!
6连接失效!!!!
第6页执行完毕!!!



现象是:总共6页,前3页正常,后3页,从第4页开始,查询不到数据了???

原因在于:初始加载 ,A1 ,B1 ,C1,D1,E1,   F1,,H1,  I1,   J1 ,  K1,  L1 (这里将字段和标志绑定在一起)

                             flag=2            flag=1

     page=1         A2 ,B2              C1,D1,E1,   F1,,H1,  I1,   J1 ,  K1,  L1      (flag=1的集合在发生变化,更新了A1,B1变为A2,B2)

    page=2          A2 ,B2 , E2,   F2              C1,D1,,H1,  I1,   J1 ,  K1,  L1             (flag=1的集合在发生变化,更新了E1,F1变为E2,F2)

   page=3           A12,B2 , E2,   F2   J2,  K2                C1,D1,,H1,  I1,  L1                           (flag=1的集合在发生变化,更新了J1,K1变为了J2,K2)

   page=4               A2 ,B2 , E2   F2  J2,  K2              C1,D1,,H1,  I1,  L1                    (flag=1的集合不再发生变化,limit 6,2,现在只剩下5个元素,找不到元素,所以集合为null)

page =5     。。。。。。。

page=6   。。。。。

根源在于:每更新一页,原来查询的集合会发生变化,重新组合。

2.解决办法如下:

public static void main(String[] args) {

   int pageSize=2;//每页条数
int page=1;
  while(true){
  List<EntityRelation> rrList=getGraphRelationDataByDb(page, pageSize);
  if(rrList!=null&&rrList.size()>0){
  updateAnalysisDataFlag(rrList);
  }
  else{
  System.out.println("第"+page+"页执行0条,执行完毕!!!");
  break;
  }
  
  System.out.println("第"+page+"页执行完毕!!!");
  page++;
  }
}

sql语句:

 StringBuffer sb=new StringBuffer();
  sb.append("select * from st_test where flag!=2 limit ?,? ");//表示已经分析过test_flg==2

  int start=0;
  paramList.add(start);
  paramList.add(pageSize);



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值