我正在使用 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();