ストアド プロシージャを使用して 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 サンプル データベースへの開いている接続が関数に渡され、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();
}
}