次の方法で共有


更新数があるストアド プロシージャの使用

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 サンプル データベースへの開いている接続が関数に渡され、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();
    }
}

関連項目

ストアド プロシージャでのステートメントの使用