Junior
Wat is het verschil tussen PreparedStatement en Statement?
sobes.tech AI
Antwoord van AI
Statement wordt gebruikt voor het uitvoeren van statische SQL-query's. Het wordt telkens gecompileerd bij uitvoering.
PreparedStatement wordt gebruikt voor het uitvoeren van parametrische SQL-query's. De query wordt één keer gecompileerd bij het aanmaken van het PreparedStatement-object en kan meerdere keren worden uitgevoerd met verschillende parameterwaarden.
Belangrijkste verschillen:
| Functie | Statement | PreparedStatement |
|---|---|---|
| Prestaties | Wordt bij elke uitvoering gecompileerd. | Wordt één keer gecompileerd. Efficiënter bij hergebruik. |
| Veiligheid | Gevoelig voor SQL-injecties door stringconcatenatie. | Beschermt tegen SQL-injecties door automatische parameterescaping. |
| Parameters | Ondersteunt geen parametrische query's. | Ondersteunt parametrische query's (?). |
| Leesbaarheid | Minder leesbaar bij grote hoeveelheden data. | Leesbaarder bij gebruik van parameters. |
Voorbeeld van gebruik van Statement:
// Voorbeeld met Statement (gevoelig voor SQL-injecties)
String user = "admin";
String pass = "' OR '1'='1"; // SQL-injectie voorbeeld
String query = "SELECT * FROM users WHERE username = '" + user + "' AND password = '" + pass + "'";
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery(query);
Voorbeeld van gebruik van PreparedStatement:
// Voorbeeld met PreparedStatement (beschermd tegen SQL-injecties)
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();