Junior
PreparedStatement va Statement o'rtasidagi farq nima?
sobes.tech AI
AIdan javob
Statement statik SQL so'rovlarni bajarish uchun ishlatiladi. U har safar bajarilganda kompilyatsiya qilinadi.
PreparedStatement parametrli SQL so'rovlarini bajarish uchun ishlatiladi. So'rov PreparedStatement ob'ekti yaratilganda bir marta kompilyatsiya qilinadi va turli parametr qiymatlari bilan takroran bajarilishi mumkin.
Asosiy farqlar:
| Xususiyat | Statement | PreparedStatement |
|---|---|---|
| Ishlash tezligi | Har safar bajarilganda kompilyatsiya qilinadi. | Bir marta kompilyatsiya qilinadi. Takror foydalanishda samaraliroq. |
| Xavfsizlik | Stringlarni qo'shish orqali SQL injektsiyalariga ochiq. | Parametrlarning avtomatik qochirilishi bilan SQL injektsiyalaridan himoya qiladi. |
| Parametrlar | Parametrli so'rovlarni qo'llab-quvvatlamaydi. | Parametrli so'rovlarni (?) qo'llab-quvvatlaydi. |
| O'qish osonligi | Ko'p ma'lumot bilan ishlashda kamroq o'qilishi mumkin. | Parametrlar bilan ishlashda ko'proq o'qilishi mumkin. |
Statement dan foydalanish misoli:
// SQL injektsiyasiga ochiq misol
String user = "admin";
String pass = "' OR '1'='1"; // SQL injektsiya misoli
String query = "SELECT * FROM users WHERE username = '" + user + "' AND password = '" + pass + "'";
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery(query);
PreparedStatement dan foydalanish misoli:
// SQL injektsiyasidan himoyalangan misol
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();