Utilisation d'une procédure stockée avec un nombre de mises à jour
Pour modifier les données d’une base de données SQL Server en utilisant une procédure stockée, le pilote Microsoft JDBC pour SQL Server fournit la classe SQLServerCallableStatement. La classe SQLServerCallableStatement permet d’appeler des procédures stockées qui modifient les données de la base de données et retournent le nombre de lignes affectées, également appelé nombre de mises à jour.
Une fois l’appel à la procédure stockée configuré à l’aide de la classe SQLServerCallableStatement, vous pouvez appeler la procédure stockée à l’aide de la méthode execute ou de la méthode executeUpdate. La méthode executeUpdate retourne une valeur int contenant le nombre de lignes affectées par la procédure stockée, au contraire de la méthode execute. Si vous utilisez la méthode execute et souhaitez obtenir le nombre de lignes affectées, vous pouvez appeler la méthode getUpdateCount après l’exécution de la procédure stockée.
Notes
Si vous souhaitez que le pilote JDBC retourne tous les nombres de mises à jour, y compris les nombres de mises à jour retournées par des déclencheurs qui ont pu se déclencher, définissez la propriété de chaîne de connexion lastUpdateCount sur « false ». Pour plus d'informations sur la propriété lastUpdateCount, consultez Paramétrage des propriétés de connexion.
Par exemple, créez la table et la procédure stockée suivantes, et insérez également des exemples de données dans l’exemple de base de données 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);
Dans l’exemple suivant, une connexion ouverte à l’exemple de base de données AdventureWorks2022 est transmise à la fonction, la méthode execute permet d’appeler la procédure stockée UpdateTestTable, puis la méthode getUpdateCount permet de retourner le nombre de lignes affectées par la procédure stockée.
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();
}
}