2009-05-28 3 views
1

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

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 

ответ

4

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

+0

Спасибо! Я пробовал jTDS, и он работает красиво. –

Смежные вопросы