代码之家  ›  专栏  ›  技术社区  ›  Paul

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

  •  1
  • Paul  · 技术社区  · 15 年前

    我使用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 国家:

    为了最大限度地提高可移植性,呼叫 结果集对象和更新计数 应该在得到 输出参数的值。

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

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

    1 回复  |  直到 15 年前
        1
  •  2
  •   Remus Rusanu    15 年前

    所有结果设置后,输出参数都会显示在导线上。任何客户机,无论是平台还是技术,都必须先解析所有结果,然后才能看到输出参数值。

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