使用含更新計數的預存程序

下載 JDBC 驅動程式

為了使用預存程序來修改 SQL Server 資料庫中的資料,Microsoft JDBC Driver for SQL Server 提供了 SQLServerCallableStatement 類別。 使用 SQLServerCallableStatement 類別時,您可以呼叫會修改資料庫中所含資料的預存程序,並傳回受影響的資料列計數 (也稱為更新計數)。

使用 SQLServerCallableStatement 類別設定預存程序的呼叫之後,接著便可以使用 execute 或 executeUpdate 方法呼叫預存程序。 executeUpdate 方法會傳回 int 值,其中包含預存程序所影響的資料列數目,但是 execute 方法則不會傳回該值。 如果使用 execute 方法並想要取得受影響的資料列計數,則您可以在執行預存程序之後呼叫 getUpdateCount 方法。

注意

如果想要 JDBC 驅動程式傳回所有更新計數 (包括任何可能已引發之觸發程序所傳回的更新計數),請將 lastUpdateCount 連接字串屬性設為 "false"。 如需 lastUpdateCount 屬性的詳細資訊,請參閱設定連線屬性。

舉例來說,建立以下表格和儲存程序,並在 AdventureWorks2025 範例資料庫中插入範例資料:

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);  

在以下範例中,將 AdventureWorks2025 範例資料庫的開啟連線傳遞到函式,執行方法呼叫 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();
        System.out.println("ROWS AFFECTED: " + count);
    }
    // Handle any errors that may have occurred.
    catch (SQLException e) {
        e.printStackTrace();
    }
}