Middle
Qu'est-ce que les procédures stockées et comment peut-on les appeler via JDBC?
sobes.tech IA
Réponse de l'IA
Les procédures stockées sont un ensemble d'instructions SQL compilées et stockées dans la base de données. Elles s'exécutent comme une unité et peuvent accepter des paramètres, retourner des valeurs. Elles permettent d'encapsuler la logique métier, d'améliorer la performance et la sécurité.
Pour appeler des procédures stockées via JDBC, on utilise l'interface CallableStatement.
import java.sql.*;
public class StoredProcedureExample {
public static void main(String[] args) {
String url = "jdbc:mysql://localhost:3306/mydatabase"; // URL de votre base de données
String user = "myuser";
String password = "mypassword";
try (Connection conn = DriverManager.getConnection(url, user, password)) {
// Appel de procédure sans paramètres
String sqlNoParams = "{CALL my_procedure_no_params()}";
try (CallableStatement stmtNoParams = conn.prepareCall(sqlNoParams)) {
stmtNoParams.execute();
System.out.println("Procédure sans paramètres exécutée.");
}
// Appel de procédure avec paramètre d'entrée
String sqlWithInParams = "{CALL my_procedure_with_in(?, ?)}";
try (CallableStatement stmtWithInParams = conn.prepareCall(sqlWithInParams)) {
stmtWithInParams.setString(1, "Valeur1"); // Définir le premier paramètre IN
stmtWithInParams.setInt(2, 42); // Définir le deuxième paramètre IN
stmtWithInParams.execute();
System.out.println("Procédure avec paramètres d'entrée exécutée.");
}
// Appel de procédure avec paramètre de sortie
String sqlWithInOutParams = "{CALL my_procedure_with_out(?, ?)}";
try (CallableStatement stmtWithInOutParams = conn.prepareCall(sqlWithInOutParams)) {
stmtWithInOutParams.setInt(1, 123); // Définir le paramètre IN
stmtWithInOutParams.registerOutParameter(2, Types.VARCHAR); // Enregistrer le paramètre OUT
stmtWithInOutParams.execute();
String outValue = stmtWithInOutParams.getString(2);
System.out.println("Procédure avec paramètre de sortie exécutée. Valeur de sortie : " + outValue);
}
// Appel de procédure retournant ResultSet
String sqlWithResultSet = "{CALL my_procedure_return_rs()}";
try (CallableStatement stmtWithResultSet = conn.prepareCall(sqlWithResultSet)) {
boolean hasResultSet = stmtWithResultSet.execute();
if (hasResultSet) {
try (ResultSet rs = stmtWithResultSet.getResultSet()) {
while (rs.next()) {
// Traitement des données du ResultSet
System.out.println("ID : " + rs.getInt("id") + ", Nom : " + rs.getString("name"));
}
}
}
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
Étapes principales :
- Obtenir une connexion à la base de données (
Connection). - Créer un objet
CallableStatementen utilisantconnection.prepareCall(). La chaîne d'appel doit être au format{CALL nom_procedure(...)}. - Si la procédure a des paramètres d'entrée (
INouINOUT), définir leurs valeurs avec les méthodessetXyz(). La numérotation des paramètres commence à 1. - Si la procédure a des paramètres de sortie (
OUTouINOUT), ils doivent être préalablement enregistrés avec le type de données viaregisterOutParameter(int parameterIndex, int sqlType). - Exécuter l'appel à la procédure stockée avec
execute()ouexecuteQuery()(si la procédure retourne unResultSet). - Pour les paramètres de sortie, récupérer leurs valeurs avec
getXyz(). - Traiter le
ResultSetsi la procédure en retourne un. - Fermer
CallableStatement,ResultSetetConnection. Il est recommandé d'utilisertry-with-resources.
L'utilisation de CallableStatement permet de travailler avec différents types de paramètres dans les procédures stockées, y compris les tableaux, structures et objets de types spécifiques à la base de données.