在通过jdbc处理SQL Server中的结果集之前访问输出参数

时间:2009-11-05 19:02:38

标签: sql-server stored-procedures jdbc

我使用MS JDBC驱动程序调用2005 MS SQL Server存储过程,并希望在处理结果集之前访问输出参数,如下所示:

        proc = "{call mySproc(?,?,?)}";
        conn = ds.getConnection();
        callableStmt = conn.prepareCall(proc);
        callableStmt.setString(1,inputParam);
        callableStmt.registerOutParameter(2,Types.INTEGER);
        callableStmt.registerOutParameter(3,Types.INTEGER);
        callableStmt.execute();

        rs =  (ResultSet)callableStmt.getResultSet(); 
        output[0] = callableStmt.getInt(2); //@rc
        output[1] = callableStmt.getInt(3); //@rs           

        if(output[0] != 0){
            //do some stuff 
        } else {
           // process result set
        }  

问题是在处理结果集之前访问输出参数会导致结果集关闭。

有没有办法在不改变存储过程的情况下实现这一目标?

可以通过JDBC为其他数据库执行此操作。但是,通过研究,我发现了JDBC Spec个状态:

  

为了获得最大的便携性,请拨打电话   ResultSet对象和更新计数   应该在获得之前进行处理   输出参数的值。

是否已经按照法律规定实施了MS JDBC驱动程序,而其他JDBC驱动程序提供了更灵活的实现?

希望有人能够澄清我对这个问题的理解。

1 个答案:

答案 0 :(得分:2)

在所有结果集之后,输出参数出现在线上。无论平台或技术如何,任何客户端都必须先解析所有结果,然后才能看到输出参数值。

如果在使用结果集之前有客户端提供输出参数的值,则意味着它们将结果集缓存在内存中。非常糟糕,考虑到结果集可以增长报价。