Sobes.tech
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();