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
謝謝!我試過jTDS,它運行得很漂亮。 – 2009-05-29 19:08:58