2009-05-06 4 views
3

У нас есть подготовленный отчет в Java, и мы слышим, что он отличается от Statement тем, что этот подготовленный оператор не нужно компилировать каждый раз, когда он используется.Вопрос о подготовленном заявлении в Java

Вопрос: где хранится это скомпилированное заявление? В клиентском коде, который использует его или хранится в базе данных?

Почему БД хранит скомпилированный оператор и если он работает, как надолго?

ответ

4

Базы данных имеют кэш запросов, а это означает, что при выполнении запроса база данных кэширует анализируемый/скомпилированный запрос и, возможно, план запроса для устранения будущих вычислений.

Подготовленные операторы обычно кэшируются сначала на уровне приложения, где контейнер приложения отвечает за управление кэшем операторов. В большинстве контейнеров приложений есть опции для управления кэшем готовых инструкций (например: glassfish).

Как вы можете видеть here, основное отличие, как вы заявили: с помощью подготовленных операторов приложение уменьшает затраты на компиляцию одного и того же оператора снова и снова. В качестве основной заметки для большинства контейнеров приложений оператор должен быть точно таким же (включая пробел), чтобы правильно использовать его, поэтому будьте осторожны при использовании написанных вручную запросов.

+0

Mig, Это означает, что драйвер JDBC имеет возможность конвертировать подготовленное заявление в составное заявление? Что означает, что Драйвер достаточно умен, чтобы разбирать запрос и идентифицировать Синтаксические ошибки? – Geek

+0

AFAIK, драйвер не анализирует запросы, только DB делает это. Каждая синтаксическая ошибка генерируется парсером БД. Но сервер приложений достаточно умен, чтобы повторно использовать те же самые заявления, где различаются только args (placeholders '?'). –

Смежные вопросы