具体代码如下,由于最终返回的结果集当中每列都是sum()
具体语句结果为下
    select sum(a),sum(b),sum(c) from 
    (select sum(),sum(),sum() from B where xxxxxx); 子查询当中没有结果集,但是外层的汇总对还是会有一条记录,记录当中的所有记录都是空.
用resultset的next()判断还是会有记录。用rs.get.....方法的时候会有空指针异常
有什么什么比较好的方法吗,除了手动去判断是否为空。
CallableStatement  call = conn.prepareCall("{call VF_P_QUREY_PRO.vf_qurey_pro_sum(?,?,?,?)}");
//分别对应机构ID,起始日期,终止日期,返回游标。
call.setString(1,organId);
call.setString(2,beginDate);
call.setString(3,endDate);
call.registerOutParameter(4, OracleTypes.CURSOR);
                   call.registerOutParameter(4, OracleTypes.CURSOR);
call.execute();//查询结果集是否为空 true:表示有结果集,false:无结果集

ResultSet rs  = (ResultSet)call.getObject(4);
while(rs.next()){
System.out.print(rs.getBigDecimal(1)+" ");
                         }

解决方案 »

  1.   

    sum返回的是一个int值啊 怎么会是空呢按照你写的sql最后肯定是有一条记录的,是0,0,0然后你可以根据业务需要看是否要处理sum值是0的记录
      

  2.   

    你吧保存sum(a),sum(b),sum(c)的变量定义成int型并且初始值赋为0这样应该就不会报空指针异常了
      

  3.   

    sum是累加,而任何的null值做四则运算得到的结果都是null,所以sum也是会返回null值的
    可以再最终的sql语句把null处理成零,这样就没有空指针了。
    select nvl(sum(a),0),nvl(sum(b),0),nvl(sum(c),0) from  
        £¨select sum(),sum(),sum() from B where xxxxxx£©; 
      

  4.   

    你sum(a) 
    所有a is null出来就是null
    可以修改下sql,
    nvl(sum(a),0)