Junior
Was ist der Unterschied zwischen PreparedStatement und Statement?
sobes.tech KI
Antwort von AI
Statement wird verwendet, um statische SQL-Abfragen auszuführen. Es wird bei jeder Ausführung kompiliert.
PreparedStatement wird verwendet, um parametrisierten SQL-Abfragen auszuführen. Die Abfrage wird einmal beim Erstellen des PreparedStatement-Objekts kompiliert und kann mehrfach mit unterschiedlichen Parameterwerten ausgeführt werden.
Hauptunterschiede:
| Funktionalität | Statement | PreparedStatement |
|---|---|---|
| Leistung | Wird bei jeder Ausführung kompiliert. | Wird einmal kompiliert. Ist bei wiederholter Verwendung effizienter. |
| Sicherheit | Anfällig für SQL-Injektionen durch String-Konkatenation. | Schützt vor SQL-Injektionen durch automatische Parameterescapierung. |
| Parameter | Unterstützt keine parametrisierten Abfragen. | Unterstützt parametrisierte Abfragen (?). |
| Lesbarkeit | Weniger lesbar bei großen Datenmengen. | Besser lesbar bei Verwendung von Parametern. |
Beispiel für die Verwendung von Statement:
// Beispiel mit Statement (anfällig für SQL-Injektionen)
String user = "admin";
String pass = "' OR '1'='1"; // Beispiel für SQL-Injektion
String query = "SELECT * FROM users WHERE username = '" + user + "' AND password = '" + pass + "'";
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery(query);
Beispiel für die Verwendung von PreparedStatement:
// Beispiel mit PreparedStatement (geschützt vor SQL-Injektionen)
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();