存储过程中间就一条select语句,java中执行语句如下:
CallableStatement call = dbTran.getConn().prepareCall(("{?=call pro_test (?,?) }"));
call.registerOutParameter(1, Types.INTEGER);
call.setInt(2, 1);
call.setInt(3, 2);
call.execute();
rs = call.getResultSet();
if(rs.next()){ 
  .....
}在rs.next()时出现错误,提示:Caused by: java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Object has been closed.这是什么原因?如果存储过程中有插入在语句,用call.getResultSet()返回null值,这是为什么?

解决方案 »

  1.   

    存储过程如下:
    CREATE  proc pro_test(@p1 int ,@p2 int)
    as
    begin
        declare @ret int    select a.e_id,a.p_id,b.e_name,sum(a.p_d_money)
        from t_pay_detail a,(select e_id,e_name
            from T_s_employee) b
        where a.e_id=b.e_id
        group by a.e_id,a.p_id,b.e_name      set @ret=1
       return @ret
    end 直接执行存储过程没有问题,有记录
      

  2.   

    oracle 的比较容易,你是SQL吧?不懂
      

  3.   

    建议你把贴子移到数据库SQL的板块去吧,那里的DBA多
      

  4.   

    CREATE  proc pro_test(@p1 int ,@p2 int)                   --参数没用到
    as
    begin
        declare @ret int                                     --也没用到    select a.e_id,a.p_id,b.e_name,sum(a.p_d_money)
        from t_pay_detail a,(select e_id,e_name
            from T_s_employee) b
        where a.e_id=b.e_id
        group by a.e_id,a.p_id,b.e_name      set @ret=1                                       --没有用
       return @ret                                         --没有用
    end 把带参数的都去掉都可以.存储过程本身没问题.
    那楼主就要检查一下java代码了
      

  5.   

    把带注释的都去掉都可以.存储过程本身没问题.
    那楼主就要检查一下java代码了
      

  6.   

    我的java代码也贴在上面了,@ret是我要返回的代码,因为中间还有处理过程,太长,所以我就把省略掉了,但是就这样的存储过程我也运行不出结果集!
      

  7.   

    CallableStatement call = dbTran.getConn().prepareCall(("{?=call pro_test (?,?) }"));
    -->
    CallableStatement call = dbTran.getConn().prepareCall(("{exec ?=pro_test (?,?) }"));