Junior
Каква е разликата между PreparedStatement и Statement?
sobes.tech AI
Отговор от AI
Statement се използва за изпълнение на статични SQL заявки. Той се компилира всеки път при изпълнение.
PreparedStatement се използва за изпълнение на параметризирани SQL заявки. Заявката се компилира веднъж при създаването на обекта PreparedStatement и може да бъде изпълнявана многократно с различни стойности на параметрите.
Основни разлики:
| Функция | Statement | PreparedStatement |
|---|---|---|
| Производителност | Компилира се при всяко изпълнение. | Компилира се веднъж. По-ефективен при повторна употреба. |
| Сигурност | Уязвим към SQL инжекции чрез конкатенация на низове. | Защитава от SQL инжекции чрез автоматично екраниране на параметрите. |
| Параметри | Не поддържа параметризирани заявки. | Поддържа параметризирани заявки (?). |
| Четливост | По-малко четлив при работа с голямо количество данни. | По-четлив при работа с параметри. |
Пример за използване на Statement:
// Пример с Statement (уязвим към SQL инжекции)
String user = "admin";
String pass = "' OR '1'='1"; // Пример за SQL инжекция
String query = "SELECT * FROM users WHERE username = '" + user + "' AND password = '" + pass + "'";
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery(query);
Пример за използване на PreparedStatement:
// Пример с PreparedStatement (защитава от 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();