Maison >base de données >tutoriel mysql >Qu'est-ce que PreparedStatement dans JDBC ?

Qu'est-ce que PreparedStatement dans JDBC ?

WBOY
WBOYavant
2023-09-11 09:09:091487parcourir

L'interface

Quest-ce que PreparedStatement dans JDBC ?

PreparedStatement étend l'interface Statement, qui représente une instruction SQL précompilée qui peut être exécutée plusieurs fois. Il accepte une requête SQL paramétrée et vous pouvez transmettre 0 ou plusieurs paramètres à cette requête.

Initialement, cette instruction utilise des espaces réservés "?" au lieu de paramètres, plus tard, vous pouvez transmettre des paramètres pour les implémenter dynamiquement à l'aide de la méthode setXXX() de l'interface PreparedStatement.

Créer un PreparedStatement

Vous pouvez créer un PreparedStatement (interface) en utilisant la méthode prepareStatement() de l'interface de connexion. Cette méthode accepte une requête (paramétrée) et renvoie un objet PreparedStatement.

Lorsque vous appelez cette méthode, l'objet Connection envoie la requête donnée à la base de données pour la compiler et la sauvegarder. Si la requête est compilée avec succès, seul l'objet est renvoyé.

Pour compiler la requête, la base de données ne nécessite aucune valeur, vous pouvez donc utiliser (zéro ou plus) espaces réservés (points d'interrogation ” ?”) pour remplacer les valeurs dans la requête.

Par exemple, s'il existe une table nommée Employé dans la base de données, créez-la à l'aide de la requête suivante.

CREATE TABLE Employee(Name VARCHAR(255), Salary INT NOT NULL, Location VARCHAR(255));

Vous devriez alors pouvoir y insérer des valeurs à l'aide d'instructions préparées comme indiqué ci-dessous.

//Creating a Prepared Statement
String query="INSERT INTO Employee(Name, Salary, Location)VALUES(?, ?, ?)";
Statement pstmt = con.prepareStatement(query);

Définissez la valeur de l'espace réservé

PreparedStatementL'interface fournit plusieurs méthodes de définition, telles que setInt(), setFloat(), setArray(), setDate(), setDouble(), etc., pour définir des instructions précompilées La valeur de l'espace réservé.

Ces méthodes acceptent deux paramètres, l'un est une valeur entière représentant l'index de position de l'espace réservé et l'autre est un int, une chaîne, un float, etc. représentant la valeur que vous devez insérer.

Vous pouvez définir la valeur de l'espace réservé pour l'instruction créée ci-dessus à l'aide de la méthode setter dans l'exemple suivant :

pstmt.setString(1, "Amit");
pstmt.setInt(2, 3000);
pstmt.setString(3, "Hyderabad");

pstmt.setString(1, "Kalyan");
pstmt.setInt(2, 4000);
pstmt.setString(3, "Vishakhapatnam");

pstmt.setString(1, "Renuka");
pstmt.setInt(2, 5000);
pstmt.setString(3, "Delhi");

pstmt.setString(1, "Archana");
pstmt.setInt(2, 15000);
pstmt.setString(3, "Mumbai");

Exécuter une instruction préparée

Après avoir créé l'objet PreparedStatement, vous pouvez utiliser l'un des execute() méthodes de l'interface PreparedStatement pour l'exécuter, à savoir execute(), executeUpdate() etexecuteQuery().

  • execute() : strong> Cette méthode exécute une instruction SQL statique normale dans l'objet d'instruction préparé actuel et renvoie une valeur booléenne.

  • executeQuery() : Cette méthode exécute

  • executeUpdate() : Cette méthode exécute des instructions SQL DML telles que insert update ou delete dans le Prepared actuel. Il renvoie une valeur entière représentant le nombre de lignes affectées.

Vous pouvez exécuter l'instruction préparée créée ci-dessus comme suit :

Exemple

Dans cet exemple, nous essayons d'insérer des valeurs dans une table nommée "Employés" à l'aide d'instructions préparées.

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class PreparedStatementExample {
   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......");

      //Creating a Prepared Statement
      String query = "INSERT INTO Employees(Name, Salary, Location) VALUES (?, ?, ?)";
      PreparedStatement pstmt = con.prepareStatement(query);

      pstmt.setString(1, "Amit");
      pstmt.setInt(2, 3000);
      pstmt.setString(3, "Hyderabad");

      pstmt.setString(1, "Kalyan");
      pstmt.setInt(2, 4000);
      pstmt.setString(3, "Vishakhapatnam");

      pstmt.setString(1, "Renuka");
      pstmt.setInt(2, 5000);
      pstmt.setString(3, "Delhi");

      pstmt.setString(1, "Archana");
      pstmt.setInt(2, 15000);
      pstmt.setString(3, "Mumbai");

      int num = pstmt.executeUpdate();
      System.out.println("Rows inserted ....");
   }
}

Output

Connection established......
Number of rows inserted: 1

Si vous validez la base de données, vous pouvez observer les valeurs insérées dans le tableau :

+---------+--------+----------------+
| Name    | Salary | Location       |
+---------+--------+----------------+
| Amit    | 30000  | Hyderabad      |
| Kalyan  | 40000  | Vishakhapatnam |
| Renuka  | 50000  | Delhi          |
| Archana | 15000  | Mumbai         |
+---------+--------+----------------+
5 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