2009-05-28 40 views
1

我在Microsoft SQL Server 2005中使用了Microsoft JDBC驅動程序2.0。爲了更好地解釋我的問題,讓我從示例代碼開始調用存儲過程。執行存儲過程時使用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事件探查我看到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

嘗試使用SQL Server的jTDS驅動程序。我在工作中使用它,它似乎比MS提供的驅動程序好很多。

+0

謝謝!我試過jTDS,它運行得很漂亮。 – 2009-05-29 19:08:58