Как преобразовать из набора результатов Java в запрос ColdFusion в Railo? - PullRequest
8 голосов
/ 09 февраля 2010

Следующее отлично работает в 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, выполняет запрос к нему, помещает его в набор результатов Java, а затем создается экземпляр coldfusion.sql.QueryTable, передается объект результата Java, а затем вызывается queryTable.FirstTable () , который возвращает фактический набор результатов холодной сварки (для cfloop и т. п.).

Проблема связана с различием в реализации Railo. Запуск этого кода в Railo возвращает следующую ошибку: Не найдено соответствующего конструктора для coldfusion.sql.QueryTable (org.sqlite.RS).

Я сбросил Java-объект Railo и не вижу init () среди методов. Я что-то упустил? Я бы тоже хотел, чтобы это работало в Railo.

Обратите внимание: я выполняю подключение без DSN к базе данных SQLite. Я понимаю, как настроить источник данных CF. На данный момент мой единственный сбой - перевод из набора результатов Java в запрос Railo.

1 Ответ

5 голосов
/ 09 февраля 2010

Глядя на исходный код Railo, я вижу, что railo.runtime.type.QueryImpl может соответствовать вашим потребностям. Он реализует railo.runtime.type.Query и принимает ResultSet в своем конструкторе, но, похоже, не реализует QueryTable.

Если это правильный класс, вам нужно передать ResultSet и строку для имени запроса, поскольку в нем нет конструктора, который принимает только ResultSet.

...