1

我正在使用 JDBC 在 MSSql 2005 中调用存储过程。我希望结果集使用服务器端游标来限制客户端使用的内存量。我可以使用简单的查询并在连接上设置 SelectMethod=cursor 轻松地做到这一点。当我将该查询放入存储过程时,似乎返回了整个结果集,就好像连接是使用 SelectMethod=direct 创建的一样。

有没有办法让存储过程调用表现得像一个简单的查询。

我已经使用 MS SQL JDBC 驱动程序 1.1 和 1.2 进行了测试。在下面的示例中,totalMemory 的两个值之间的差异取决于结果的大小,而不获取任何行。

long totalMemoryUsed = java.lang.Runtime.getRuntime().totalMemory();
String sql = "{call ap_Select(?, ?, ?, ?)}";

CallableStatement cstmt = conn.prepareCall(sql,ResultSet.TYPE_FORWARD_ONLY,  
                           ResultSet.CONCUR_READ_ONLY);     
cstmt.setString(1,readAlldbnames );
cstmt.setString(2,readPublicDbnames);
cstmt.setString(3, whereClause);
cstmt.setString(4, " order by key5 ");

ResultSet a_resultSet = cstmt.executeQuery();
long totalMemoryUsedAfterQuery = java.lang.Runtime.getRuntime().totalMemory();
4

1 回答 1

0

到目前为止,我发现的唯一一件事就是从表中的存储过程中获取结果集,然后在表上使用服务器端游标并删除表......我希望我能找到比这更好的方法。

请让我知道是否可以将服务器端游标用于使用 JDBC 的存储过程调用。

谢谢,
萨亚利

于 2010-04-15T05:22:13.533 回答