J'utilise Microsoft JDBC Driver 2.0 avec SQL Server 2005. Pour mieux expliquer ma question, laissez-moi commencer par un exemple de code pour appeler une procédure stockée.Redondance avec le pilote Microsoft JDBC lors de l'exécution d'une procédure stockée
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();
}
L'utilisation de profils SQL je vois que le pilote JDBC génère les instructions SQL suivantes pour l'appel -
declare @P1 int
set @P1=1
exec sp_prepexec @P1 output, N'@P0 int', N'EXEC getEmployeeManagers @P0', 50
select @P1
Cela signifie donc quand j'exécute une procédure stockée à l'aide d'un CallableStatement, la sp_prepexec
déclaration est appelé. Et plus tard quand je ferme la déclaration, le sp_unprepare
est appelé. Cela semble être le comportement par défaut du pilote JDBC. Le problème est, l'en-tête pour générer une instruction préparée et puis la fermer a un impact sur les performances. Le pilote peut-il exécuter la procédure directement? Pourquoi ne pas le conducteur peut faire exactement cela -
exec getEmployeeManagers @P0=50
Merci! J'ai essayé jTDS et cela fonctionne magnifiquement. –