执行存储过程时使用 Microsoft JDBC 驱动程序的开销

Posted

技术标签:

【中文标题】执行存储过程时使用 Microsoft JDBC 驱动程序的开销【英文标题】:Overhead with Microsoft JDBC driver when executing a stored procedure 【发布时间】:2009-05-28 21:04:53 【问题描述】:

我正在使用带有 SQL Server 2005 的 Microsoft JDBC Driver 2.0。为了更好地解释我的问题,让我从调用存储过程的示例代码开始。

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

【问题讨论】:

【参考方案1】:

尝试使用 SQLServer 的 jTDS 驱动程序。我在工作中使用它,它似乎比MS提供的驱动好很多。

【讨论】:

以上是关于执行存储过程时使用 Microsoft JDBC 驱动程序的开销的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 JDBC 将表值参数(类数组参数)传递给 Microsoft SQL Server 2008 R2 中的存储过程? [复制]

关于jdbc调用存储过程的问题

通过jdbc执行的存储过程

使用JDBC CallableStatements执行存储过程

JDBC存储过程调用

JAVA使用JDBC技术操作SqlServer数据库执行存储过程