ResultSet的嵌套写法没获取到想要的数据

String sql="sql语句1"    //sql语句1

ResultSet rst=st.executeQuery(sql);

while(rst.next()){

qsql="sql语句1中的查询结果作为sql语句2的查询条件"  //sql语句2

ResultSet qrst=st.executeQuery(qsql);

        if(qrst.next()){

       //如果有数据获得数据

        }

}

/*我的预期事while循环会找出所有的结果,但是while只执行了一次就结束了循环,原因是qrst把rst里边的内容给覆盖了,意不意外?惊不惊喜?解决办法就是先把rst中循环出的数据保存在list中,然后循环list,也就是把两个ResultSet 分开写*/

部分源码:

private void dealLocalPRT(){
log.info("=====================批量处理个人本地查询开始=====================");
Connection conn = DBUtil.getJndiConnection();
Statement st=null;
Statement ust=null;
String sql="select p.pk,p.certype,p.cercode,p.queryreason,p.valid_days,p.vertype from per_credit_rep_info p where p.dealresult in ('0', '4') and p.wf_appr_sts = '997'and p.pboc_loc_rpt = '02'";
List<String[]> list=new ArrayList<String[]>();
try {
st=conn.createStatement();
ust=conn.createStatement();
ResultSet rst=st.executeQuery(sql);
while(rst.next()){
    String pk=rst.getString(1);
String certype= rst.getString(2);
String cercode= rst.getString(3);
String queryreason= rst.getString(4);
String validDays= rst.getString(5);
String vertype=rst.getString(6);
if("31".equals(vertype)){
log.info("流水号为:"+pk+",为异议版无法解析!");
continue;
}
    String[] pers=new String[5];
pers[0]=pk;
pers[1]=certype;
pers[2]=cercode;
pers[3]=queryreason;
pers[4]=validDays;
list.add(pers);

log.info("根据sql【"+sql+"】查询出批量处理个人本地查询记录为size="+list.size());
for(int i=0;i<list.size();i++){
   log.info("开始处理第【"+(i+1)+"】笔申请,共【"+list.size()+"】笔申请");
   String[] pers=list.get(i);
   String qsql="select * from (select * from per_credit_rep_info p  where 1 = 1 and certype ='"+pers[1]+"' and cercode ='"+pers[2]+"' and queryreason ='"+pers[3]+"' and to_date(substr(occurdate,1,10),'yyyy-mm-dd') >= trunc(sysdate)-'"+pers[4]+"' and DEALRESULT in ('0', '4', '9') and PBOC_LOC_RPT = '01' order by p.occurdate desc) where rownum=1";
   ResultSet qrst=st.executeQuery(qsql);
   if(qrst.next()){
   String reportId=qrst.getString("report_id");
   String repinfodir=qrst.getString("repinfodir");
   String dealresult=qrst.getString("dealresult");
   ust.addBatch("update per_credit_rep_info set report_id='"+reportId+"',repinfodir='"+repinfodir+"',dealresult='"+dealresult+"' where pk='"+pers[0]+"'");
  } 
}
ust.executeBatch();
} catch (Exception e) {
log.error("批量处理个人本地查询出现错误:"+e.getMessage());
}finally{
if(conn != null)
DBUtil.releaseConnectoin(conn);
}
log.info("=====================批量处理个人本地查询结束=====================");
}


猜你喜欢

转载自blog.csdn.net/jzl110/article/details/79788912