Sobes.tech
Junior

Care este diferența dintre PreparedStatement și Statement?

sobes.tech AI

Răspuns de la AI

Statement este utilizat pentru executarea interogărilor SQL statice. Se compilează de fiecare dată când este executat. PreparedStatement este utilizat pentru executarea interogărilor SQL parametrizate. Interogarea este compilată o singură dată la crearea obiectului PreparedStatement și poate fi executată de mai multe ori cu valori diferite ale parametrilor.

Diferențele principale:

Caracteristică Statement PreparedStatement
Performanță Se compilează de fiecare dată la execuție. Se compilează o singură dată. Este mai eficient pentru reutilizare.
Securitate Vulnerabil la injecții SQL prin concatenarea stringurilor. Protejează împotriva injecțiilor SQL prin escaparea automată a parametrilor.
Parametri Nu suportă interogări parametrizate. Suportă interogări parametrizate (?).
** lizibilitate** Mai puțin lizibil cu cantități mari de date. Mai lizibil când se folosesc parametri.

Exemplu de utilizare a Statement:

// Exemplu cu Statement (vulnerabil la injecții SQL)
String user = "admin";
String pass = "' OR '1'='1"; // Exemplu de injecție SQL
String query = "SELECT * FROM users WHERE username = '" + user + "' AND password = '" + pass + "'";
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery(query);

Exemplu de utilizare a PreparedStatement:

// Exemplu cu PreparedStatement (protejat împotriva injecțiilor SQL)
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();