Что делает предварительная компиляция JDBC PreparedStatement? - PullRequest
9 голосов
/ 31 марта 2011

Что делает «предварительная компиляция» оператора, потому что я видел, что если я пишу подготовленную инструкцию с плохим синтаксисом SQL, то компиляция не сообщает о какой-либо проблеме!

Так что, если предварительная компиляция подготовленной инструкции не 't проверить правильность синтаксиса, что на самом деле он делает?

Ответы [ 2 ]

14 голосов
/ 31 марта 2011

Создание PreparedStatements может включать или не включать проверку синтаксиса SQL или даже обращения к серверу БД, что полностью зависит от используемого драйвера JDBC.Некоторые драйверы будут выполнять тестирование в обе стороны или проверять, другие - нет.

Так что на некоторых драйверах JDBC PreparedStatement не более "подготовлен", чем обычный Statement.(Другими словами: с некоторыми драйверами JDBC PreparedStatement представляет ресурс на стороне сервера (аналогично Connection), в то время как на других это чисто клиентская конструкция).

Однако, важное отличиеявляется то, что PreparedStatement поможет вам обрабатывать динамические значения параметров таким образом, чтобы гарантированно избежать любых проблем с экранированием или форматированием, которые возникнут, если вы попытаетесь вставить значения в строку оператора SQL вручную и выполнить его с помощью обычного Statement.

Эта функция независима от выбора «подготовки» оператора заранее или нет, поэтому он предоставляется каждым драйвером JDBC, даже если он не выполняет никакой другой подготовкишаги.

1 голос
/ 31 марта 2011

«Составление операторов» - это то, что происходит в базе данных, что помогает быстрее и эффективнее возвращать результаты.Если вы используете PreparedStatement, то это позволяет базе данных повторно использовать оператор, который уже был скомпилирован, и избавляет от необходимости делать это снова.Плохой SQL, вероятно, приведет к плохо компилируемому оператору базы данных, но не всегда.

...