Empleo de un procedimiento almacenado con un recuento de actualización
Para modificar los datos de una base de datos de SQL Server con un procedimiento almacenado, Microsoft JDBC Driver para SQL Server proporciona la clase SQLServerCallableStatement. Con la clase SQLServerCallableStatement, puede llamar a los procedimientos almacenados que modifican los datos en la base de datos y devuelven un recuento del número de filas afectadas, lo que se denomina recuento de actualización.
Una vez configurada la llamada al procedimiento almacenado mediante la clase SQLServerCallableStatement, puede llamar al procedimiento almacenado con el método execute o executeUpdate. El método executeUpdate devuelve un valor int que contiene el número de filas afectadas por el procedimiento almacenado, mientras que el método execute no lo hace. Si usa el método execute y quiere obtener el recuento del número de filas afectadas, puede llamar al método getUpdateCount después de ejecutar el procedimiento almacenado.
Nota:
Si desea que el controlador JDBC devuelva todos los recuentos de actualizaciones, incluidos los recuentos de actualizaciones devueltos por todos los desencadenadores activados, establezca la propiedad de cadena de conexión lastUpdateCount en "false". Para obtener más información sobre la propiedad lastUpdateCount, consulte Establecimiento de las propiedades de conexión.
A modo de ejemplo, cree la tabla y el procedimiento almacenado siguientes e inserte también datos de ejemplo en la base de datos de ejemplo de 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);
En el siguiente ejemplo, se pasa una conexión abierta a la base de datos de ejemplo de AdventureWorks2022 a la función, se usa el método execute para llamar al procedimiento almacenado UpdateTestTable y luego se usa el método getUpdateCount para devolver un recuento de las filas afectadas por el procedimiento almacenado.
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();
}
}