Я использую JDBC для вызова хранимой процедуры в MSSql 2005. Мне бы хотелось, чтобы набор результатов использовал серверные курсоры для ограничения объема памяти, используемой клиентом. Я могу сделать это легко, используя простой запрос и установив курсор SelectMethod = на соединение. Когда я помещаю этот запрос в хранимую процедуру, кажется, что весь набор результатов возвращается так, как если бы соединение было создано с помощью 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();