Como usar um procedimento armazenado com uma contagem de atualização

Baixar driver JDBC

Para modificar dados em um banco de dados do SQL Server usando um procedimento armazenado, o Microsoft JDBC Driver para SQL Server fornece a classe SQLServerCallableStatement. Usando a classe SQLServerCallableStatement, você pode chamar procedimentos armazenados que modificam dados que estão no banco de dados e retornam uma contagem do número de linhas afetadas, também chamada de contagem de atualização.

Depois de definir a chamada para o procedimento armazenado usando a classe SQLServerCallableStatement, chame o procedimento armazenado usando o método execute ou o método executeUpdate. O método executeUpdate retornará um valor int que contém o número de linhas afetadas pelo procedimento armazenado, mas o método execute não o retornará. Se você usa o método execute e quer obter a contagem do número de linhas afetadas, chame o método getUpdateCount depois de executar o procedimento armazenado.

Observação

Se você quiser que o driver JDBC retorne todas as contagens de atualização, inclusive contagens de atualização retornadas por gatilhos que possam ter sido acionados, defina a propriedade da cadeia de conexão lastUpdateCount como "false". Para obter mais informações sobre a propriedade lastUpdateCount, confira Configuração das propriedades de conexão.

Como um exemplo, crie a tabela seguinte e o procedimento armazenado e insira dados de exemplo no banco de dados de exemplo do 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);  

No exemplo seguinte, uma conexão aberta ao banco de dados de exemplo do AdventureWorks2022 é passada para a função, o método execute é usado para chamar o procedimento armazenado UpdateTestTable e, em seguida, o método getUpdateCount é usado para retornar uma contagem das linhas que são afetadas pelo procedimento armazenado.

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

Confira também

Como usar instruções com procedimentos armazenados