使用带有更新计数的存储过程

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

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

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

作为示例，在 SQL Server 2005 AdventureWorks 示例数据库中创建以下表和存储过程，以及插入示例数据：

    CREATE TABLE TestTable
       (Col1 int IDENTITY,
        Col2 varchar(50),
        Col3 int);

    CREATE PROCEDURE UpdateTestTable
       @Col2 varchar(50),
       @Col3 int
    AS
    BEGIN
       UPDATE TestTable
       SET Col2 = @Col2, Col3 = @Col3
    END;
    INSERT INTO dbo.TestTable (Col2, Col3) VALUES ('b', 10);

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

    public static void executeUpdateStoredProcedure(Connection con) {
       try {
          CallableStatement cstmt = con.prepareCall("{call dbo.UpdateTestTable(?, ?)}");
          cstmt.setString(1, "A");
          cstmt.setInt(2, 100);
          cstmt.execute();
          int count = cstmt.getUpdateCount();
          cstmt.close();

          System.out.println("ROWS AFFECTED: " + count);
       }
       catch (Exception e) {
          e.printStackTrace();
       }
    }

# 请参阅

使用带有存储过程的语句
发送有关本主题的反馈至 Microsoft。

© 2012 Microsoft。保留所有权利。