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