不是控制,而是我调用存储过程(用游标)时,莫名出现错误,而调用其他存储过程则无错,我想语句上不应出现错误!不知到是不是java.sql.callablestatement支不支持游标。

解决方案 »

  1.   

    javax.servlet.ServletException
    at org.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:507)
    at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:448)
    at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:266)
    at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1292)
    at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:510)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:243)
    at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
    at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:190)
    at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
    at org.apache.catalina.valves.CertificatesValve.invoke(CertificatesValve.java:246)
    at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
    at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
    at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2343)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
    at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
    at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:170)
    at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:170)
    at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:468)
    at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
    at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
    at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
    at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
    at org.apache.catalina.connector.http.HttpProcessor.process(HttpProcessor.java:1012)
    at org.apache.catalina.connector.http.HttpProcessor.run(HttpProcessor.java:1107)
    at java.lang.Thread.run(Thread.java:536)
    root cause java.lang.NullPointerException
    at encry.lsgtdbaction.execute(lsgtdbaction.java:54)
    at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:446)
    at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:266)
    at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1292)
    at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:510)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:243)
    at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
    at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:190)
    at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
    at org.apache.catalina.valves.CertificatesValve.invoke(CertificatesValve.java:246)
    at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
    at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
    at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2343)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
    at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
    at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:170)
    at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:170)
    at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:468)
    at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
    at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
    at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
    at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
    at org.apache.catalina.connector.http.HttpProcessor.process(HttpProcessor.java:1012)
    at org.apache.catalina.connector.http.HttpProcessor.run(HttpProcessor.java:1107)
    at java.lang.Thread.run(Thread.java:536)错误如上:我也想不出是哪里的错
      

  2.   

    程序部分如下:
    String $LRRQ=req.getParameter("lrrq");
        String $BRNO=req.getParameter("bmmc");
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd");
        java.util.Date $acdt=sdf.parse($LRRQ);
        java.sql.Date dateTime = new java.sql.Date($acdt.getTime());//sql类型    /*通过cookie来获取登陆的用户名*/Cookie[] cookies=req.getCookies();//取得cookie资料
    Cookie temp=null;
    int cookielen=cookies.length;
    String $CKUS=null;
    if(cookielen!=0)
    {
      for(int i=0;i<cookielen;i++)
      {
        temp=cookies[i];
        if(temp.getName().equals("user_name"))
        {
          $CKUS=temp.getValue();
        }
      }
    }
        /*
    连接Sybase数据库
    */
      dbsql   condb=new dbsql();
      condb.opendb();
      java.sql.CallableStatement   cs=condb.conn.prepareCall("{call up_wy_cx_datacheck1(?,?,?,?)}");
      cs.registerOutParameter(4,1);
      cs.setString(1,$CKUS);
      cs.setString(2,$BRNO);
      cs.setDate(3,dateTime);
     int[] nResults =cs.executeBatch();
     String $ERCD=cs.getString(4);
    if($ERCD.equals("1"))
    {
      return mapping.findForward("lsgtsuccess");
    }
      else
      {
      return mapping.findForward("lsgtfaile");
    }
    }
    }
      

  3.   

    有java.lang.NullPointerException异常,应该是你自己的代码抛出的,try+catch仔细找找。
      

  4.   

    我换成用jsp写了个测试,还是!java.lang.NullPointerException
    帮帮忙了,高手
      

  5.   

    为什么要用executeBatch?
    估计就是这儿出错,直接用execute吧。
      

  6.   

    hai,我一开始就是用的execute,而且jsp测试我也用的是execute,但是还是错!java.lang.NullPointerException!
    jdbc支持游标吗?
      

  7.   

    用execute时,下面片断可能有帮助:
                    boolean bool = stat.execute(sql);
                        while (true) {
                            if (bool) {
                                ResultSet rset = stat.getResultSet();
                                //process resultset
                            } else {
                                int count = stat.getUpdateCount();
                                if (count == -1) break;//end
                                //process count
                            }
                            bool = stat.getMoreResults();
                        }
      

  8.   

    不是游标的问题,其实你可以跟踪调试一下,出现空指针错误,无非不就是你的GET取值时没有得到预定的值,而是一个null值。
      

  9.   

    我调试了一下!怪事
    --》cs.registerOutParameter(4,1);
    下面的根本就没运行!:
      cs.setString(1,$CKUS);
      cs.setString(2,$BRNO);
      cs.setDate(3,dateTime);
      

  10.   

    String $ERCD=cs.getString(4);
    返回null怎么会这样?
      

  11.   

    create procedure up_wy_cx_datacheck1(  
    @CKUS char(5) ,--稽核人员  
    @BRNO char(4) ,--部门号  
    @ACDT datetime,--窗口日期  
    --@DTLY char(1) , --'0'vc_cx ; '1'ls_cx  数据来源  
    @ERCD char(1) out  
    )  
    as  
    begin  
      --游标变量  
       declare @XH_LS    int  
       declare @ACDT_LS datetime  
       declare @BRNO_LS char(4)  
       declare @AMCD_LS char(1)  
       declare @ACNO_LS char(15)  
       declare @TSAM_LS money  
        
       set rowcount 0  
       delete from TEMP_CHECK1  
        --导入LS_CX数据到临时表    
      INSERT TEMP_CHECK1 (XH,ACDT,BRNO,AMCD,ACNO,TSAM,DTLY )  
            SELECT  XH,ACDT,BRNO,AMCD,ACNO,TSAM,'1'   
             FROM LS_CX  
             WHERE ACDT=@ACDT and BRNO=@BRNO and CKUS=@CKUS AND STCD='0' and XDST='1'--未删除的并且需要下单的  
      if @@error<>0    
        begin  
          goto error  
        end  
          
          
          
      --导入其它库中的VC数据到临时表  
       insert TEMP_CHECK1(ACDT,BRNO,AMCD,ACNO,TSAM,RFNO,DTLY )  
             select RFDT,BRNO,AMCD,CUNO+ACSF,TSAM,RFNO, '0'  
         from VC_CX   
         where RFDT=@ACDT and BRNO=@BRNO  
             if @@error<>0    
                   begin  
                     goto error  
                   end  
       
      /*********  
       --判断是否是系统日期(???????)  
       declare @retcode int  
       declare @CDATE datetime  
       exec @retcode = up_pc_getaccountdate @CDATE output    
        if @retcode <> 0     
          begin  
                goto error  
          end  
         
       if @CDATE=@ACDT  --是当日  
         begin  
            insert TEMP_CHECK1(ACDT,BRNO,AMCD,ACNO,TSAM,RFNO,DTLY )  
             select RFDT,BRNO,AMCD,CUNO+ACSF,TSAM,RFNO, '0'  
               from *.VC   
               where RFDT=@ACDT and BRNO=@BRNO   
              if @@error<>0  
                begin    
                  goto error  
                end  
         end  
       else   --非当日??????????是否提供历史流水????  
         begin   
           insert TEMP_CHECK1(ACDT,BRNO,AMCD,ACNO,TSAM,RFNO,DTLY )  
             select RFDT,BRNO,AMCD,CUNO+ACSF,TSAM,RFNO, '0'  
               from *.HVC   
               where RFDT=@ACDT and BRNO=@BRNO  
              if @@error<>0    
                begin  
                  goto error  
                end  
         end  
      **********/  
      
      set rowcount 1  
        
      --开始勾挑  
      DECLARE CUR_LS CURSOR FOR  
          SELECT XH,ACDT,BRNO,AMCD,ACNO,TSAM  
          FROM   TEMP_CHECK1  
          where  DTLY='1'--LS_CX表  
      OPEN CUR_LS  
      FETCH CUR_LS INTO @XH_LS, @ACDT_LS, @BRNO_LS, @AMCD_LS, @ACNO_LS, @TSAM_LS   
      if @@sqlstatus =2 --当日无任何帐户    
           begin    
              close CUR_LS  
              goto succ     
           end    
             
       while @@sqlstatus=0    
       begin  
           if exists (select 1 from TEMP_CHECK1 where DTLY='0' and  ACDT=@ACDT_LS and BRNO=@BRNO_LS and AMCD=@AMCD_LS and ACNO=@ACNO_LS  and TSAM=@TSAM_LS )  
              begin  
                --删除VC数据  
               delete from TEMP_CHECK1 where DTLY='0' and  ACDT=@ACDT_LS and BRNO=@BRNO_LS and AMCD=@AMCD_LS and ACNO=@ACNO_LS  and TSAM=@TSAM_LS --VC 表数据  
                if @@error<>0    
                   begin  
                     close CUR_LS  
                     goto error  
                   end  
                --删除LS_CX数据  
                delete from TEMP_CHECK1 where  XH=@XH_LS and DTLY='1'  --LS_CX 表数据  
                if @@error<>0    
                  begin  
                     close CUR_LS  
                     goto error  
                  end  
                --更改下单标志  
                update LS_CX set XDST='0' where XH=@XH_LS --不下单  
                if @@error<>0    
                  begin  
                     close CUR_LS  
                     goto error  
                  end  
              end     
      
            FETCH CUR_LS INTO @XH_LS, @ACDT_LS, @BRNO_LS, @AMCD_LS, @ACNO_LS, @TSAM_LS   
       end  
       close CUR_LS  
        
        
        
      --将VC表中需要二次勾挑的数据插入ERR_CX表  
       --VC表变量  
       declare @RFDT_VC datetime  
       declare @BRNO_VC char(4)  
       declare @AMCD_VC char(1)  
       declare @ACNO_VC char(15)  
       declare @TSAM_VC money  
       declare @RFNO_VC char(8)  
        
      declare @RTCD char(1)  
      declare @retcode int  
        
      declare CUR_TEMP cursor for  
         select ACDT, BRNO, AMCD, ACNO, TSAM, RFNO  
          from TEMP_CHECK1  
          where DTLY='0'  
      open CUR_TEMP   
      fetch CUR_TEMP into @RFDT_VC, @BRNO_VC, @AMCD_VC, @ACNO_VC, @TSAM_VC, @RFNO_VC  
      if @@sqlstatus =2 --当日无任何错误帐户    
           begin    
              close CUR_TEMP  
              goto succ     
           end    
             
       while @@sqlstatus=0   
        begin  
          
           exec @retcode = up_wy_err_cx_add_all @RFDT_VC,@CKUS,@BRNO_VC,@AMCD_VC,'',@ACNO_VC,@TSAM_VC,@RFNO_VC,'ZDGT','0','1','','缺少帐务流水票据',@RTCD out  
                --ERR_CX(XH , ACDT, CKUS, BRNO, AMCD, ACIT, ACNO, TSAM, RFNO, ERTP, STCD, XDST, COM1, COM2)  
                --( @i,@RFDT_VC, @CKUS, @BRNO_VC, @ACIT_VC, @ACNO_VC, @TSAM_VC, @RFNO_VC, 'ZDGT','0','1','缺少帐务流水票据','' )  
            if @retcode <> 0    
               begin  
                 close CUR_TEMP  
                 goto error  
               end    
            if @RTCD='0'  
               begin   
                 close CUR_TEMP  
                 goto error  
               end           
           fetch CUR_TEMP into @RFDT_VC, @BRNO_VC, @AMCD_VC, @ACNO_VC, @TSAM_VC, @RFNO_VC  
        end  
      close CUR_TEMP  
        
       select @ERCD='1'--成功  
       goto succ    
      error:  
        begin  
           select @ERCD='0'  --失败  
        end       
       succ:  
          return 0 
    end  
      

  12.   

    改成这样吗?cs.registerOutParameter(4,java.sql.Types.CHAR);理由
      

  13.   

    关于java中如何调用带有游标的存储过程和返回结果集我以前作过
    有很多资料,想要的话。。哈哈留下mail
      

  14.   

    楼上的,给我也来一份
    [email protected]
      

  15.   

    java中的数据类型和数据库中的类型不是对应的,你应改知道
    关于不同的数据库java中有不全有返回值类型,但可以得到,在转换
    而且有的数据库公司也有针对的返回值类型
      

  16.   

    你要是想要资料留下mail,我给你发过去,你自己看,不过全是代码!
    但收到后我要200分
      

  17.   

    cs.registerOutParameter(4,1);难道这样不对吗?
      

  18.   

    --》cs.registerOutParameter(4,1);
    下面的根本就没运行!:
      还是这样吗?
      

  19.   

    不,现在取得的输出参数为null,没有取得'0'或'1'