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