Sobes.tech
Junior

Quelle est la différence entre PreparedStatement et Statement?

sobes.tech IA

Réponse de l'IA

Statement est utilisé pour exécuter des requêtes SQL statiques. Il est compilé à chaque exécution. PreparedStatement est utilisé pour exécuter des requêtes SQL paramétrées. La requête est compilée une seule fois lors de la création de l'objet PreparedStatement et peut être exécutée plusieurs fois avec différentes valeurs de paramètres.

Principales différences :

Fonctionnalité Statement PreparedStatement
Performance Se compile à chaque exécution. Se compile une fois. Plus performant pour la réutilisation.
Sécurité Vulnérable aux injections SQL par concaténation de chaînes. Protège contre les injections SQL grâce à l’échappement automatique des paramètres.
Paramètres Ne supporte pas les requêtes paramétrées. Supporte les requêtes paramétrées (?).
Lisibilité Moins lisible avec beaucoup de données. Plus lisible avec des paramètres.

Exemple d’utilisation de Statement :

// Exemple avec Statement ( vulnérable aux injections SQL)
String user = "admin";
String pass = "' OR '1'='1"; // Exemple d’injection SQL
String query = "SELECT * FROM users WHERE username = '" + user + "' AND password = '" + pass + "'";
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery(query);

Exemple d’utilisation de PreparedStatement :

// Exemple avec PreparedStatement ( protégé contre les injections SQL)
String user = "admin";
String pass = "' OR '1'='1";
String query = "SELECT * FROM users WHERE username = ? AND password = ?";
PreparedStatement pstmt = connection.prepareStatement(query);
pstmt.setString(1, user);
pstmt.setString(2, pass);
ResultSet rs = pstmt.executeQuery();