为了使用存储过程修改 SQL Server 数据库中的数据,Microsoft SQL Server 2005 JDBC Driver 提供了 SQLServerCallableStatement 类。通过使用 SQLServerCallableStatement 类,可以调用修改数据库中所包含数据的存储过程,然后返回受影响的行数计数(也称为更新计数)。

使用 SQLServerCallableStatement 类构建对存储过程的调用之后,可以使用 executeexecuteUpdate 方法中的任意一个来调用此存储过程。executeUpdate 方法将返回一个 int 值,该值包含受此存储过程影响的行数,但 execute 方法不返回此值。如果使用 execute 方法,并且希望获得受影响的行数计数,则可以在运行存储过程后调用 getUpdateCount 方法。

Note注意:

如果要让 JDBC 驱动程序返回所有更新计数,包括任何可能已不再使用的触发器所返回的更新计数,请将 lastUpdateCount 连接字符串属性设置为“false”。有关 lastUpdateCount 属性的详细信息,请参阅设置连接属性

作为实例,在 SQL Server 2005 AdventureWorks 示例数据库中创建以下表和存储过程:

 

 1CREATE TABLE TestTable 
 2   (Col1 int IDENTITY
 3    Col2 varchar(50), 
 4    Col3 int);
 5
 6CREATE PROCEDURE UpdateTestTable
 7   @Col2 varchar(50),
 8   @Col3 int
 9AS
10BEGIN
11   UPDATE TestTable
12   SET Col2 = @Col2, Col3 = @Col3
13END;

在下面的实例中,将向此函数传递 AdventureWorks 示例数据库的打开连接,并使用 execute 方法调用 UpdateTestTable 存储过程,然后使用 getUpdateCount 方法返回受存储过程影响的行计数。

 1public static void executeUpdateStoredProcedure(Connection con) {
 2   try {
 3      CallableStatement cstmt = con.prepareCall("{call dbo.UpdateTestTable(?, ?)}");
 4      cstmt.setString(1"A");
 5      cstmt.setInt(2100);
 6      cstmt.execute();
 7      int count = cstmt.getUpdateCount();
 8      cstmt.close();
 9
10      System.out.println("ROWS AFFECTED: " + count);
11   }

12   catch (Exception e) {
13      e.printStackTrace();
14   }

15}