我使用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驱动程序提供了更灵活的实现?
希望有人能够澄清我对这个问题的理解。
答案 0 :(得分:2)
在所有结果集之后,输出参数出现在线上。无论平台或技术如何,任何客户端都必须先解析所有结果,然后才能看到输出参数值。
如果在使用结果集之前有客户端提供输出参数的值,则意味着它们将结果集缓存在内存中。非常糟糕,考虑到结果集可以增长报价。