Junior
Jaký je rozdíl mezi PreparedStatement a Statement?
sobes.tech AI
Odpověď od AI
Statement se používá k provádění statických SQL dotazů. Je kompilován při každém provedení.
PreparedStatement se používá k provádění parametrizovaných SQL dotazů. Dotaz je zkompilován jednou při vytvoření objektu PreparedStatement a může být opakovaně spuštěn s různými hodnotami parametrů.
Hlavní rozdíly:
| Funkce | Statement | PreparedStatement |
|---|---|---|
| Výkon | Kompiluje se při každém provedení. | Kompiluje se jednou. Je efektivnější při opakovaném použití. |
| Bezpečnost | Náchylný k SQL injection přes spojování řetězců. | Chrání před SQL injection díky automatickému escapování parametrů. |
| Parametry | Nepodporuje parametrizované dotazy. | Podporuje parametrizované dotazy (?). |
| Čitelnost | Méně čitelný při práci s velkým množstvím dat. | Čitelnější při práci s parametry. |
Příklad použití Statement:
// Příklad s Statement (náchylné k SQL injection)
String user = "admin";
String pass = "' OR '1'='1"; // Příklad SQL injection
String query = "SELECT * FROM users WHERE username = '" + user + "' AND password = '" + pass + "'";
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery(query);
Příklad použití PreparedStatement:
// Příklad s PreparedStatement (chráněno před SQL injection)
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();