分享方式:


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

下載 JDBC 驅動程式

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

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

注意

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

例如,您可以在 AdventureWorks2022 範例資料庫中建立下列資料表和預存程序,同時插入範例資料:

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

在下列範例中,AdventureWorks2022 範例資料庫的開啟連線會傳入函式中、將 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();
        System.out.println("ROWS AFFECTED: " + count);
    }
    // Handle any errors that may have occurred.
    catch (SQLException e) {
        e.printStackTrace();
    }
}

另請參閱

搭配預存程序使用陳述式