Я знаю преимущества использования PreparedStatement
, которые являются
Но я хочу знать, когда мы используем его вместо Statement
?
Запрос переписан и скомпилирован сервером базы данных
, если вы не используете готовый Заявление, сервер базы данных будет должны разбирать и вычислять План выполнения для заявления Каждый раз, когда вы запускаете его. Если вы найдете что вы запускаете одно и то же утверждение несколько раз (с разными параметры) тогда стоит готовить утверждение один раз и повторно повторно повторно подготовленное заявление. Если ты Запрос базы данных Adhoc затем Вероятно, есть мало пользы это.
защищен от инъекции SQL
Это преимущество, которое вы почти
Всегда хочу, отсюда и хорошая причина
Используйте готовность
каждый раз.
Это следствие необходимости
параметризовать запрос, но он делает
Сделайте его много безопаснее. То
только раз, когда я могу думать об этом
не будет полезен, если бы вы были
разрешение запросов баз данных ADHOC; Ты
может просто использовать заявление
объект, если вы были прототипированы
Приложение и его быстрее для вас,
или если запрос не содержит
Параметры.
Эй, если вы идете вниз по дороге jQuery вы должны проверить jQtouch плагин
-121--2850172-awk '$0="prefix"$0' file > new_file
С помощью Perl (замена на месте):
perl -pi 's/^/prefix/' file
-121--549773- Помимо предотвращения вставки SQL, форматирования переносимости (что невозможно получить из оператора
), производительность является очевидной причиной. Однако Заявление
не обходится без штрафа. Например, это обычно медленнее, чем инструкция
, если она выполняется только один раз, так как имеются некоторые накладные расходы. Таким образом, общая идея состоит в том, что оператор
должен использоваться при многократном выполнении одного и того же запроса. Однако объем накладных расходов зависит от реализации сервера базы данных, поэтому точное время выбора TaxingStatement
вместо Statement
из соображений производительности должно основываться на фактическом опыте/экспериментах конкретного сервера базы данных.
Я бы повернул этот раунд: в публично распределенном приложении вы должны вообще всегда используют подготовленные заявления , если у вас действительно неотъемлемая часть не на , и вы должны всегда поставлять параметры «правильно» на подготовленное утверждение, а не сращивание их в строку запроса.
Почему? Ну, в основном из-за причин, по которым вы дали (или, по крайней мере, второй) ...
Использование утверждения в JDBC должно быть на 100% локализовано для использования в DDL (ALTER, CREATE, GRANT и т.д.) поскольку это единственные типы утверждений, которые не могут принять BIND ПАРИАБЛИ.Готовые заявления или заявления по вызову следует использовать для КОЛЬКОГО ДРУГОГОГО типа заявления. (DML, запросы). Так как это типы операторов, которые принимают переменные привязки.
Это факт, правило, закон -- используйте подготовленные выражения ВСЕГДА. Использовать ЗАЯВЛЕНИЯ почти нигде.
Он конкретно говорит об Oracle, но тот же принцип применим к любой базе данных, которая кэширует планы выполнения.
Приложения баз данных, которые одновременно масштабируют и предотвращают атаки SQL-инъекций? Какова обратная сторона?