Sobes.tech
Junior

Kuo skiriasi PreparedStatement nuo Statement?

sobes.tech AI

Atsakymas iš AI

Statement naudojamas vykdyti statinius SQL užklausas. Jis kompiliuojamas kiekvieną kartą vykdant. PreparedStatement naudojamas vykdyti parametrizuotas SQL užklausas. Užklausa yra kompiliuojama vieną kartą kuriant PreparedStatement objektą ir gali būti vykdoma daug kartų su skirtingomis parametrų reikšmėmis.

Pagrindiniai skirtumai:

Savybė Statement PreparedStatement
Našumas Kiekvieno vykdymo metu kompiliuojamas. Vieną kartą kompiliuojamas. Daugkartinis naudojimas yra efektyvesnis.
Saugumas Pažeidžiamas SQL injekcijoms dėl stringų sujungimo. Apsaugo nuo SQL injekcijų automatiškai apdorodamas parametrus.
Parametrai Nepalaiko parametrizuotų užklausų. Palaiko parametrizuotas užklausas (?).
** Skaitymas** Mažiau skaitomas dirbant su dideliu duomenų kiekiu. Lengviau skaitomas dirbant su parametrais.

Statement naudojimo pavyzdys:

// Statement pavyzdys (pažeidžiamas SQL injekcijoms)
String user = "admin";
String pass = "' OR '1'='1"; // SQL injekcijos pavyzdys
String query = "SELECT * FROM users WHERE username = '" + user + "' AND password = '" + pass + "'";
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery(query);

PreparedStatement naudojimo pavyzdys:

// PreparedStatement pavyzdys (apsaugotas nuo SQL injekcijų)
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();