為了使用預存程序來修改 SQL Server 資料庫中的資料,Microsoft SQL Server 2005 JDBC Driver 提供了 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;
在下列範例中,連至 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();
}
}