когда использовать заявление поверх подготовленного заявления? - PullRequest
9 голосов
/ 14 июня 2011

Когда использовать оператор вместо подготовленного. я предполагаю, что оператор используется в запросах без параметров, но почему бы не использовать подготовленный оператор? Какой из них быстрее для запросов без параметров.

Ответы [ 2 ]

10 голосов
/ 14 июня 2011

Полагаю, оператор используется в запросах без параметров, но почему бы не использовать подготовленный оператор?

Это даже не близко.PreparedStatements используются в случае операторов INSERT, UPDATE и DELETE, которые возвращают ResultSet или счетчик обновлений.Они не будут работать для операторов DDL, как указано Joachim, и они также не будут работать для вызова хранимых процедур, где следует использовать CallableStatement (это не является разницей между двумя классами).Что касается запросов без параметров связывания, PreparedStatements может оказаться лучше, чем операторы (см. Ниже).

Какой из них быстрее для запросов без параметров.

PreparedStatements окажется быстрее в долгосрочной перспективе, по сравнению с расширенным использованием в одном соединении.Это потому, что, хотя PreparedStatements нужно скомпилировать, что может занять некоторое время (это на самом деле не так уж много, поэтому не рассматривайте это как недостаток), скомпилированная версия по существу содержит ссылку на план выполнения SQL вбаза данных.После компиляции PreparedStatement сохраняется в специальном кеше соединения, так что скомпилированная версия может быть повторно использована для повышения производительности.Если вы используете пакетные операции JDBC, использование PreparedStatements сделает выполнение пакета намного более быстрым, чем использование простых объектов Statement, где план, возможно, придется готовить снова и снова, если база данных должна это делать.

4 голосов
/ 10 августа 2011

Это зависит от ваших требований.

Если у вас есть оператор SQL, который выполняется в цикле или часто с другими параметрами, тогда PreparedStatement - лучший кандидат, так как он предварительно компилируется и кэширует план выполнения дляэто параметризованный SQL-запрос.Каждый раз, когда он запускается из одного и того же объекта PreparedStatement, он будет использовать кэшированный план выполнения и обеспечивает лучшую производительность.

Также можно избежать внедрения SQL с помощью PreparedStatement.

Но если вы уверены, что вы запускаетеSQL-запрос только один раз, иногда оператор будет лучшим кандидатом, поскольку при создании объекта PreparedStatement иногда выполняется дополнительный вызов БД, если драйвер поддерживает прекомпиляцию, метод Connection.prepareStatement (java.lang.String) будетотправить заявление в базу данных для предварительной компиляции.

Прочитайте статью ниже, чтобы понять «Оператор в сравнении с PreparedStatement»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...