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();