Maison  >  Article  >  base de données  >  Qu’est-ce que CallableStatement dans JDBC ?

Qu’est-ce que CallableStatement dans JDBC ?

PHPz
PHPzavant
2023-09-07 23:53:02897parcourir

L'interface

JDBC 中的 CallableStatement 是什么?

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.

Création d'un CallableStatement

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

Définir les valeurs pour les paramètres d'entrée

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");

Exécuter une instruction Callable

Après avoir créé un objet CallableStatement, vous pouvez utiliser l'une des méthodes execute() pour l'exécuter.

cstmt.execute();

Exemple

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 ....");
   }
}

Output

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer