Junior
Aký je rozdiel medzi PreparedStatement a Statement?
sobes.tech AI
Odpoveď od AI
Statement sa používa na vykonávanie statických SQL dopytov. Je kompilovaný pri každom vykonaní.
PreparedStatement sa používa na vykonávanie parametrizovaných SQL dopytov. Dopyt je skompilovaný raz pri vytvorení objektu PreparedStatement a môže byť opakovane vykonávaný s rôznymi hodnotami parametrov.
Hlavné rozdiely:
| Funkcia | Statement | PreparedStatement |
|---|---|---|
| Výkon | Kompiluje sa pri každom vykonaní. | Kompiluje sa raz. Je efektívnejší pri opakovanom použití. |
| Bezpečnosť | Náchylný na SQL injection cez spojovanie reťazcov. | Chráni pred SQL injection pomocou automatického escapovania parametrov. |
| Parametre | Nepodporuje parametrizované dopyty. | Podporuje parametrizované dopyty (?). |
| Čitateľnosť | Menej čitateľný pri práci s veľkým množstvom dát. | Čitateľnejší pri práci s parametrami. |
Príklad použitia Statement:
// Príklad s Statement (náchylné na SQL injection)
String user = "admin";
String pass = "' OR '1'='1"; // Príklad SQL injection
String query = "SELECT * FROM users WHERE username = '" + user + "' AND password = '" + pass + "'";
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery(query);
Príklad použitia PreparedStatement:
// Príklad s PreparedStatement (chránené pred 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();