Могу ли я сделать небуферизованный запрос в ColdFusion? - PullRequest
4 голосов
/ 02 августа 2011

Я портирую настольное приложение Java на веб-приложение ColdFusion. Это настольное приложение делало запросы с очень большими результирующими наборами (тысячи текстовых записей), которые, будучи хорошо работающими на стороне базы данных, могли бы занять много памяти на стороне клиента, если бы они были буферизованы. По этой причине приложение явно указывает драйверу базы данных не слишком много буферизировать результаты.

Теперь, когда я работаю над портом ColdFusion, у меня проблема с буферизацией. Время ожидания страницы ColdFusion во время вызова <cfquery> истекает, и я вполне уверен, что это происходит потому, что она пытается буферизовать все.

Могу ли я сделать небуферизованный запрос в ColdFusion?

Ответы [ 2 ]

2 голосов
/ 02 августа 2011

Если разбиение на страницы не является вариантом (например, вы пишете отчет, например), то вам нужно будет получить низкий уровень с Java, используя setFetchSize (). См. этот ответ . Обратите внимание, что код в ответе использует DataSourceService, который с последними обновлениями безопасности от Adobe больше не доступен на CF8. Вам нужно будет выяснить, как получить соединение через adminapi или создать соединение вне Coldfusion. Или вы можете перевести свой источник данных на , используя JNDI , и затем вы можете искать ресурс самостоятельно, не используя CF API.

1 голос
/ 02 августа 2011

Я почти уверен, что ColdFusion не предоставляет такой механизм.Как язык, он должен был отвлечь разработчика от подобных вещей.

Я бы посоветовал вам рассмотреть несколько вариантов:

  • Переработать ваш запрос, чтобыиспользуйте разбиение на страницы и запустите его в цикле.
  • Используйте атрибут timeout в <cfquery>, чтобы предотвратить тайм-ауты
  • Используйте синтаксис CreateObject() для создания экземпляра соединения с базой данных JDBC.

С последним вариантом вы фактически получаете доступ к базовым классам Java для выполнения запросов и получения результатов.Взгляните на эту статью , чтобы быстро взглянуть на функцию CreateObject().

Вы также можете посмотреть на Adobe Livedocs для функции , но они неэто действительно кажется полезным.

Я не пытался использовать CreateObject() для запросов к классам доступа к базе данных Java, но я думаю, что вы, вероятно, можете заставить его работать.

...