Maison > base de données > tutoriel mysql > le corps du texte

Qu'est-ce que PreparedStatement dans JDBC ?

WBOY
Libérer: 2023-09-11 09:09:09
avant
1453 Les gens l'ont consulté

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));
Copier après la connexion

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);
Copier après la connexion

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");
Copier après la connexion

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() : 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 ....");
   }
}
Copier après la connexion

Output

Connection established......
Number of rows inserted: 1
Copier après la connexion

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)
Copier après la connexion

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!

source:tutorialspoint.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal