Различие между оператором и PreparedStatement

Подготовленный Оператор является немного более мощной версией Оператора, и должен всегда быть, по крайней мере, так же быстр и легок обработать как Оператор.
Подготовленный Оператор может быть параметризован

Большинство реляционных баз данных обрабатывает JDBC / SQL-запрос на четырех шагах:

  1. Проанализируйте входящий SQL-запрос
  2. Скомпилируйте SQL-запрос
  3. Планируйте/оптимизируйте путь сбора данных
  4. Выполнитесь оптимизированный запрос / получают и возвращают данные

Оператор будет всегда продолжаться через четыре шага выше для каждого SQL-запроса, отправленного в базу данных. Подготовленный Оператор предварительно выполняет шаги (1) - (3) в процессе выполнения выше. Таким образом при создании Подготовленного Оператора некоторая предварительная оптимизация сразу выполняется. Эффект состоит в том, чтобы уменьшить нагрузку на механизм базы данных во время выполнения.

Теперь мой вопрос состоит в том, что - "Каким-либо другим преимуществом использования является Подготовленный Оператор?"

213
задан Vertexwahn 4 March 2016 в 06:42
поделиться

4 ответа

нечего добавить,

1 - если вы хотите выполнить запрос в цикле (более 1 раза), подготовленный оператор может быть быстрее из-за оптимизации, о которой вы упомянули.

2 - параметризованный запрос - хороший способ избежать внедрения SQL, который доступен только в PreparedStatement.

13
ответ дан 23 November 2019 в 04:27
поделиться

PreparedStatement - очень хорошая защита (но не надежная) для предотвращения атак SQL-инъекций . Значения параметров привязки - хороший способ защиты от нежелательного посещения "маленьких столиков Бобби" .

37
ответ дан 23 November 2019 в 04:27
поделиться

Преимущества PreparedStatement :

  • Предварительная компиляция и кэширование на стороне БД оператора SQL приводит к общему более быстрому выполнению и возможности повторного использования Оператор SQL в пакетах .

  • Автоматическое предотвращение атак SQL-инъекций путем экранирования кавычек и других специальных символов. Обратите внимание, что для этого необходимо использовать любой из методов PreparedStatement setXxx () для установки значений

     prepareStatement = connection.prepareStatement ("INSERT INTO Person (имя, адрес электронной почты, дата рождения, фотография) ЦЕННОСТИ (?, ?, ?, ?)");
    подготовленоStatement.setString (1, person.getName ());
    подготовленоStatement.setString (2, person.getEmail ());
    prepareStatement.setTimestamp (3, новая отметка времени (person.getBirthdate (). getTime ()));
    подготовилStatement.setBinaryStream (4, person.getPhoto ());
    подготовилStatement.executeUpdate ();
    

    и, следовательно, не встраивают значения в строку SQL путем конкатенации строк.

     prepareStatement = connection.prepareStatement ("INSERT INTO Person (name, email) VALUES ('" + person.getName () + "', '" + person.getEmail () + "'");
    подготовилStatement.executeUpdate ();
    
  • Упрощает установку нестандартных объектов Java в строке SQL, например. Дата , Время , Отметка времени , BigDecimal , InputStream ( Blob ) и Читатель ( Clob ). Для большинства из этих типов вы не можете «просто» выполнить toString () , как вы сделали бы в простом операторе .Вы даже можете провести рефакторинг всего этого, чтобы использовать PreparedStatement # setObject () внутри цикла, как показано в служебном методе ниже:

     public static void setValues ​​(PreparedStatement prepareStatement, Object ... values) выдает SQLException {
    for (int i = 0; i 

    Что можно использовать, как показано ниже:

     prepareStatement = connection.prepareStatement ("ВСТАВИТЬ В человека (имя, адрес электронной почты, дата рождения, фото) ЗНАЧЕНИЯ (?,?,?,?)");
    setValues ​​(подготовлено, person.getName (), person.getEmail (), new Timestamp (person.getBirthdate (). getTime ()), person.getPhoto ());
    подготовилStatement.executeUpdate ();
    
188
ответ дан 23 November 2019 в 04:27
поделиться

Невозможно сделать CLOBs в Statement.

And: (OraclePreparedStatement) ps

7
ответ дан 23 November 2019 в 04:27
поделиться
Другие вопросы по тегам:

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