我可以在ColdFusion中创建一个无缓冲的查询吗?

时间:2011-08-01 20:05:01

标签: coldfusion coldfusion-8

我正在将Java桌面应用程序移植到ColdFusion Web应用程序。这个桌面应用程序使用非常大的结果集(数千个文本记录)进行查询,这些结果集虽然在数据库方面很好,但如果它们被缓冲,则可能在客户端占用大量内存。出于这个原因,应用程序明确告诉数据库驱动程序不要过多地缓冲结果。

现在我正在使用ColdFusion端口,我遇到了缓冲问题。 ColdFusion页面在<cfquery>调用期间超时,我很确定这是因为它试图缓冲所有内容。

我可以在ColdFusion中创建一个无缓冲的查询吗?

2 个答案:

答案 0 :(得分:2)

如果分页不是一个选项(例如,你正在编写一个报告),那么你将不得不使用setFetchSize()获得java的低级别。见this answer。请注意,答案中的代码使用的是DataSourceService,它带有来自Adobe的最新安全补丁,在CF8上不再可用。您必须弄清楚如何通过adminapi建立连接或在coldfusion之外创建连接。或者您可以将数据源转换为use JNDI,然后您可以自己查找资源而无需使用CF api。

答案 1 :(得分:1)

我几乎可以肯定ColdFusion没有提供这样的机制。作为一种语言,它的目的是将开发人员从这样的事物中抽象出来。

我建议你研究几个选项:

  • 重新查询您的查询以使用分页,然后循环运行。
  • 使用timeout上的<cfquery>属性来防止发生超时
  • 使用CreateObject()语法实例化JDBC数据库连接。

使用最后一个选项,您实际执行的操作是访问底层Java类以执行查询和获取结果。请查看this article以快速查看CreateObject()功能。

您还可以查看Adobe Livedocs for the function,但它们似乎并没有帮助。

我没有尝试使用CreateObject()来查询Java数据库访问类,但我想你可以让它工作。