如何将Java的结果集转换为Railo中的ColdFusion查询?

8
以下代码在CFMX 7和CF8中运行良好,我认为在CF9中也是如此:
<!--- 'conn' is a JDBC connection --->
<cfset stat = conn.createStatement() />
<cfset rs = stat.executeQuery(trim(arguments.sql)) />

<!--- convert this Java resultset to a CF query recordset --->
<cfset queryTable = CreateObject("java", "coldfusion.sql.QueryTable")>
<cfset queryTable.init(rs) >
<cfset query = queryTable.FirstTable() />

这段代码使用JDBC驱动程序创建了一个语句(statement),对其执行查询,将结果放入Java resultset中,然后实例化coldfusion.sql.QueryTable,并传递Java resultset对象,最后调用queryTable.FirstTable()方法。该方法返回一个实际的coldfusion结果集(用于cfloop等操作)。

问题在于Railo的实现方式不同。在Railo中运行此代码会导致以下错误:找不到匹配coldfusion.sql.QueryTable(org.sqlite.RS)的构造函数。

我已经转储了Railo java对象,但在方法中没有看到init()。我是否错过了一些简单的东西?我很想在Railo中使其工作。

请注意:我正在对SQLite数据库进行DSN-less连接。我知道如何设置CF数据源。目前我的唯一问题是如何将Java result set翻译成Railo查询。


这可能是一个愚蠢的问题 - 但为什么不使用常规的ColdFusion数据源和<cfquery>来创建查询结果呢? - Tomalak
请参见:http://www.coldfusionjedi.com/index.cfm/2009/9/24/Hooking-up-ColdFusion-and-SQLite - Tomalak
这可能是因为QueryTable在Railo中是一个接口。所以你不能实例化它。(在Adobe CF中它是一个具体类)。我不确定Railo使用什么具体类来处理查询,或者它是否类似于Adobe CF中的QueryTable。但是,正如提到的那样,有没有理由你不能使用常规查询? - Leigh
2
我已经知道如何设置ColdFusion数据源。我知道如何在classes文件夹中加载sqlitejdbc.jar并将其作为可用的“其他”数据源在ColdFusion中使用,并且我知道如何设置连接字符串以连接到它。我是SqliteCFC项目的开发人员http://sqlitecfc.riaforge.org/,我正在进行无DSN创建SQLite数据库。我发现在CF或Railo中一切都正常,除了实际运行查询。这就解释了为什么我不使用CF数据源。我需要知道的是Railo如何从Java结果集构建查询。 - Shawn Grigson
1
Railo的开发人员在这里非常活跃http://groups.google.com/group/railo - 这可能是一个更好的问题,可以向他们提问。 - kevink
@Shawn - 说得有道理。(不过,并非每个人都有使用它们的好理由 ;) 但很高兴你找到了“Railo”版本的具体类。知道这点很好。) - Leigh
1个回答

5

查看Railo源代码,我发现railo.runtime.type.QueryImpl可能符合您的需求。它实现了railo.runtime.type.Query,并在其构造函数中接受ResultSet,但似乎没有实现QueryTable

如果这是正确的类,您将需要传入一个ResultSet和一个查询名称的字符串,因为它没有仅接受ResultSet的构造函数。


搞定了。Railo的CFML代码如下:<cfset queryTable = CreateObject("java", "railo.runtime.type.QueryImpl") /> <cfset query = queryTable.init(rs,"queryTable") /> - Shawn Grigson
3
这就是开源的美妙之处。我看了Railo的源代码,也看了他们如何使用cfdocument标记生成PDF(结果发现Railo使用pdf4ml)。 - Cody Caughlan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接