Мне сказали почти всегда (!) Закрывать заявления и связи после того, как работа сделана.

Однако у меня всегда возникает желание повторно использовать часто используемые операторы.

В каких случаях я могу повторно использовать операторы?

0
Jee Seok Yoon 14 Дек 2013 в 05:53
Вся суть подготовленных операторов в том, что их можно использовать повторно. Повторное использование подготовленного оператора избавляет сервер от необходимости каждый раз анализировать оператор и создавать план выполнения. Вы должны закрывать заявления только тогда, когда действительно закончили с ними.
 – 
user1864610
14 Дек 2013 в 05:57
Когда мне следует закрывать операторы для веб-сервера?
 – 
Jee Seok Yoon
14 Дек 2013 в 06:00
1
Я сомневаюсь, что это основная причина использования заранее подготовленных операторов. Я совершенно уверен, что это из-за параметризованных запросов, предотвращающих SQL-инъекцию.
 – 
Fabian Barney
14 Дек 2013 в 06:07
1
Каждый фрагмент кода индивидуален. Единственный ответ, который я могу дать, - «когда вы закончите их использовать».
 – 
user1864610
14 Дек 2013 в 06:07
1
Такое впечатление может возникнуть при чтении Stack Overflow. Защита от SQL-инъекций - полезный побочный эффект. К сожалению, прискорбное непонимание, которое сопровождает так много вопросов (и множество ответов), приводит к некоторым очень плохим реализациям, которые, будучи безопасными от внедрения SQL, могут быть разрушительно неэффективными.
 – 
user1864610
14 Дек 2013 в 06:10

1 ответ

Лучший ответ

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

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

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

1
Mark Rotteveel 14 Дек 2013 в 13:34