Когда мы должны использовать PreparedStatement вместо Оператора?

Я знаю преимущества использования PreparedStatement, которые являются

  • запрос переписывается и компилируется сервером базы данных
  • защита от Внедрения SQL

Но я хочу знать, когда мы используем его вместо Statement?

27
задан dimo414 21 May 2015 в 05:56
поделиться

4 ответа

  1. Запрос переписан и скомпилирован сервером базы данных

    , если вы не используете готовый Заявление, сервер базы данных будет должны разбирать и вычислять План выполнения для заявления Каждый раз, когда вы запускаете его. Если вы найдете что вы запускаете одно и то же утверждение несколько раз (с разными параметры) тогда стоит готовить утверждение один раз и повторно повторно повторно подготовленное заявление. Если ты Запрос базы данных Adhoc затем Вероятно, есть мало пользы это.

  2. защищен от инъекции SQL

    Это преимущество, которое вы почти Всегда хочу, отсюда и хорошая причина Используйте готовность каждый раз. Это следствие необходимости параметризовать запрос, но он делает Сделайте его много безопаснее. То только раз, когда я могу думать об этом не будет полезен, если бы вы были разрешение запросов баз данных ADHOC; Ты может просто использовать заявление объект, если вы были прототипированы Приложение и его быстрее для вас, или если запрос не содержит Параметры.

29
ответ дан 28 November 2019 в 04:43
поделиться

Эй, если вы идете вниз по дороге jQuery вы должны проверить jQtouch плагин

-121--2850172-
awk '$0="prefix"$0' file > new_file

С помощью Perl (замена на месте):

perl -pi 's/^/prefix/' file
-121--549773-

Помимо предотвращения вставки SQL, форматирования переносимости (что невозможно получить из оператора ), производительность является очевидной причиной. Однако Заявление не обходится без штрафа. Например, это обычно медленнее, чем инструкция , если она выполняется только один раз, так как имеются некоторые накладные расходы. Таким образом, общая идея состоит в том, что оператор должен использоваться при многократном выполнении одного и того же запроса. Однако объем накладных расходов зависит от реализации сервера базы данных, поэтому точное время выбора TaxingStatement вместо Statement из соображений производительности должно основываться на фактическом опыте/экспериментах конкретного сервера базы данных.

0
ответ дан 28 November 2019 в 04:43
поделиться

Я бы повернул этот раунд: в публично распределенном приложении вы должны вообще всегда используют подготовленные заявления , если у вас действительно неотъемлемая часть не на , и вы должны всегда поставлять параметры «правильно» на подготовленное утверждение, а не сращивание их в строку запроса.

Почему? Ну, в основном из-за причин, по которым вы дали (или, по крайней мере, второй) ...

9
ответ дан 28 November 2019 в 04:43
поделиться

Спросите мнение Тома :

Использование утверждения в JDBC должно быть на 100% локализовано для использования в DDL (ALTER, CREATE, GRANT и т.д.) поскольку это единственные типы утверждений, которые не могут принять BIND ПАРИАБЛИ.

Готовые заявления или заявления по вызову следует использовать для КОЛЬКОГО ДРУГОГОГО типа заявления. (DML, запросы). Так как это типы операторов, которые принимают переменные привязки.

Это факт, правило, закон -- используйте подготовленные выражения ВСЕГДА. Использовать ЗАЯВЛЕНИЯ почти нигде.

Он конкретно говорит об Oracle, но тот же принцип применим к любой базе данных, которая кэширует планы выполнения.

Приложения баз данных, которые одновременно масштабируют и предотвращают атаки SQL-инъекций? Какова обратная сторона?

17
ответ дан 28 November 2019 в 04:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: