Junior
101
questionbank
В чем разница между PreparedStatement и Statement?
Ответ от нейросети
sobes.tech AI
Statement используется для выполнения статических SQL-запросов. Он компилируется каждый раз при выполнении.
PreparedStatement используется для выполнения параметризованных SQL-запросов. Запрос компилируется один раз при создании объекта PreparedStatement и может быть выполнен многократно с разными значениями параметров.
Основные отличия:
| Feature | 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();