PreparedStaement - это языковая конструкция, которая предоставляет предварительно скомпилированные запросы, которые уже были объяснены в ответах выше. Одним из очень важных преимуществ использования подготовленных операторов является то, что они избавляют вас от вредоносных SQL-атак. Как? у вас есть только местозаполнитель, в который вы можете ввести значения, и нет другого способа изменить запрос (предварительно скомпилированный), тогда как в случае операторов вы можете изменить строку запроса. Пример:
У меня есть запрос на обновление таблицы -
UPDATE table_name SET col1 = 40 WHERE id = 'A001';
Это может быть изменено (злонамеренно) как -
UPDATE table_name SET col1 = 40 WHERE id = 'A001'; DROP TABLE table_name;
И твой стол исчез!
Динамические запросы - это структура базы данных, которая помогает вам написать запрос, в котором вы можете использовать переменные связывания, а не значения. Они особенно используются в коде PL / SQL. Также полезно при выполнении операторов DDL. Пример кода (Oracle):
ip_job_name := 'APP_EXTRACT';
lv_query := 'SELECT 1 FROM user_table WHERE table_name = :tab_name';</p>
<p>BEGIN</p>
<p>EXECUTE IMMEDIATE lv_query INTO lv_tab USING ip_job_name;</p>
<p>EXECUTE IMMEDIATE 'DROP TABLE ' || ip_job_name;</p>
<p>EXCEPTION</p>
<p>WHEN NO_DATA_FOUND THEN
NULL;</p>
<p>END;