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