Sobes.tech
Junior

Kāda ir atšķirība starp PreparedStatement un Statement?

sobes.tech AI

Atbilde no AI

Statement tiek izmantots, lai izpildītu statiskas SQL vaicājumus. Tas tiek kompilēts katru reizi, kad tas tiek izpildīts. PreparedStatement tiek izmantots, lai izpildītu parametrizētus SQL vaicājumus. Vaicājums tiek kompilēts vienu reizi, izveidojot PreparedStatement objektu, un to var izpildīt atkārtoti ar dažādām parametru vērtībām.

Galvenās atšķirības:

Īpašība Statement PreparedStatement
Veiktspēja Tiek kompilēts katru reizi, kad tiek izpildīts. Tiek kompilēts vienu reizi. Efektīvāk atkārtotai lietošanai.
Drošība Ir pakļauts SQL injekcijām, izmantojot virkņu savienošanu. Aizsargā pret SQL injekcijām, automātiski apstrādājot parametrus.
Parametri Nepārbalsta parametrizētus vaicājumus. Atbalsta parametrizētus vaicājumus (?).
Lasāmība Mazāk lasāms, strādājot ar lielu datu apjomu. Lasāmāks, strādājot ar parametriem.

Statement piemērs:

// Statement piemērs (pakļauts SQL injekcijām)
String user = "admin";
String pass = "' OR '1'='1"; // SQL injekcijas piemērs
String query = "SELECT * FROM users WHERE username = '" + user + "' AND password = '" + pass + "'";
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery(query);

PreparedStatement piemērs:

// PreparedStatement piemērs (aizsargāts pret SQL injekcijām)
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();