L'interface
CallableStatement fournit des méthodes pour exécuter des procédures stockées. Étant donné que l'API JDBC fournit une syntaxe d'échappement SQL de procédure stockée, vous pouvez appeler des procédures stockées d'une manière standard unique pour tous les SGBDR.
Vous pouvez créer un CallableStatement (interface) en utilisant la méthode prepareCall() de l'interface Connection. Cette méthode accepte une variable chaîne représentant la requête pour appeler la procédure stockée et renvoie un objet CallableStatement.
Les instructions appelables peuvent avoir des paramètres d'entrée, des paramètres de sortie ou les deux. Pour transmettre des paramètres d'entrée à un appel de procédure, vous utilisez des espaces réservés et définissez des valeurs pour ces paramètres à l'aide des méthodes setter (setInt(), setString(), setFloat()) fournies par l'interface CallableStatement.
En supposant que vous ayez une procédure appelée myProcedure dans votre base de données, vous pouvez préparer une instruction appelable comme celle-ci :
//Preparing a CallableStatement CallableStatement cstmt = con.prepareCall("{call myProcedure(?, ?, ?)}");
Vous pouvez utiliser la méthode setter pour définir les valeurs des paramètres d'entrée d'un appel de procédure.
Ils acceptent deux paramètres, dont l'un est une valeur entière représentant l'index de placement du paramètre d'entrée, l'autre est un int ou, String ou, float, etc... représentant la valeur que vous devez transmettre Entrez les paramètres dans le processus.
Remarque : En plus de l'index, vous pouvez également transmettre les noms de paramètres au format chaîne.
cstmt.setString(1, "Raghav"); cstmt.setInt(2, 3000); cstmt.setString(3, "Hyderabad");
Après avoir créé un objet CallableStatement, vous pouvez utiliser l'une des méthodes execute() pour l'exécuter.
cstmt.execute();
Supposons qu'il existe une table nommée Employee dans une base de données MySQL qui contient les données suivantes :
+---------+--------+----------------+ | Name | Salary | Location | +---------+--------+----------------+ | Amit | 30000 | Hyderabad | | Kalyan | 40000 | Vishakhapatnam | | Renuka | 50000 | Delhi | | Archana | 15000 | Mumbai | +---------+--------+----------------+
Nous créons une procédure nommée myProcedure pour insérer des valeurs dans la table comme suit :
Create procedure myProcedure (IN name VARCHAR(30), IN sal INT, IN loc VARCHAR(45)) -> BEGIN -> INSERT INTO Employee(Name, Salary, Location) VALUES (name, sal, loc); -> END //
Ci-dessous se trouve un exemple JDBC qui utilise une instruction appelable pour appeler la procédure créée ci-dessus afin d'insérer de nouveaux enregistrements dans la table Employee.
import java.sql.CallableStatement; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class CallableStatementExample { public static void main(String args[]) throws SQLException { //Registering the Driver DriverManager.registerDriver(new com.mysql.jdbc.Driver()); //Getting the connection String mysqlUrl = "jdbc:mysql://localhost/testdb"; Connection con = DriverManager.getConnection(mysqlUrl, "root", "password"); System.out.println("Connection established......"); //Preparing a CallableStateement CallableStatement cstmt = con.prepareCall("{call myProcedure(?, ?, ?)}"); cstmt.setString(1, "Raghav"); cstmt.setInt(2, 3000); cstmt.setString(3, "Hyderabad"); cstmt.setString(1, "Kalyan"); cstmt.setInt(2, 4000); cstmt.setString(3, "Vishakhapatnam"); cstmt.setString(1, "Rukmini"); cstmt.setInt(2, 5000); cstmt.setString(3, "Delhi"); cstmt.setString(1, "Archana"); cstmt.setInt(2, 15000); cstmt.setString(3, "Mumbai"); cstmt.execute(); System.out.println("Rows inserted ...."); } }
Connection established...... Rows inserted ....
Si vous utilisez une requête de sélection pour récupérer le contenu de la table Employee, vous pouvez observer les enregistrements nouvellement ajoutés comme indiqué ci-dessous :
mysql> select * from employee; +---------+--------+----------------+ | Name | Salary | Location | +---------+--------+----------------+ | Amit | 30000 | Hyderabad | | Kalyan | 40000 | Vishakhapatnam | | Renuka | 50000 | Delhi | | Archana | 15000 | Mumbai | | Raghav | 3000 | Hyderabad | | Raghav | 3000 | Hyderabad | | Kalyan | 4000 | Vishakhapatnam | | Rukmini | 5000 | Delhi | | Archana | 15000 | Mumbai | +---------+--------+----------------+ 9 rows in set (0.00 sec)
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!