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