Издержки с драйвером Microsoft JDBC при выполнении хранимой процедуры - PullRequest
1 голос
/ 29 мая 2009

Я использую Microsoft JDBC Driver 2.0 с SQL Server 2005. Чтобы лучше объяснить мой вопрос, позвольте мне начать с примера кода для вызова хранимой процедуры.

public static void executeSproc(Connection con) 
{
  CallableStatement cstmt = con.prepareCall("{call dbo.getEmployeeManagers(?)}");
  cstmt.setInt(1, 50);
  ResultSet rs = cstmt.executeQuery();

  while (rs.next()) {
     // print results in the result set
  }
  rs.close();
  cstmt.close();
}

Использование SQL Profiler Я вижу, что драйвер JDBC генерирует следующие SQL-операторы для вызова -

declare @P1 int
set @P1=1
exec sp_prepexec @P1 output, N'@P0 int', N'EXEC getEmployeeManagers @P0', 50
select @P1

Таким образом, это означает, что когда я выполняю хранимую процедуру, используя CallableStatement, sp_prepexec Заявление называется. А позже, когда я закрою заявление, sp_unprepare называется. Кажется, это поведение по умолчанию для драйвера JDBC. проблема в том, что накладные расходы на генерацию подготовленного оператора и его закрытие оказывает влияние на производительность. Есть ли способ для драйвера выполнить сохраненный процедура напрямую? Почему водитель не может просто сделать это -

exec getEmployeeManagers @P0=50

1 Ответ

4 голосов
/ 29 мая 2009

Попробуйте использовать драйвер jTDS для SQLServer. Я использую его на работе, и кажется, что он намного лучше, чем драйвер от MS.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...