Sobes.tech
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();