2009-05-28 5 views
1

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 

Répondre

4

Essayez d'utiliser le pilote jTDS pour SQLServer. Je l'utilise au travail et il semble être beaucoup mieux que le pilote fourni par MS.

+0

Merci! J'ai essayé jTDS et cela fonctionne magnifiquement. –

Questions connexes