使用含更新計數的預存程序
為了使用預存程序來修改 SQL Server 資料庫中的資料,Microsoft JDBC Driver for SQL Server 提供了 SQLServerCallableStatement 類別。 使用 SQLServerCallableStatement 類別時,您可以呼叫會修改資料庫中所含資料的預存程序,並傳回受影響的資料列計數 (也稱為更新計數)。
使用 SQLServerCallableStatement 類別設定預存程序的呼叫之後,接著便可以使用 execute 或 executeUpdate 方法呼叫預存程序。 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();
}
}