2010-02-09 20 views
8

Les travaux suivants fins dans CFMX 7 et CF8, et je suppose CF9 ainsi:Comment convertir un jeu de résultats Java en requête ColdFusion dans Railo?

<!--- '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() /> 

Cela crée une instruction à l'aide d'un pilote JDBC, exécute une requête contre elle, le mettre dans un resultset java, puis coldfusion.sql.QueryTable est instancié, passé l'objet resulset Java, puis queryTable.FirstTable() est appelé, ce qui renvoie un resultset coldfusion réel (pour cfloop et similaires).

Le problème vient d'une différence dans la mise en œuvre de Railo. L'exécution de ce code dans Railo renvoie l'erreur suivante: Aucun constructeur correspondant à coldfusion.sql.QueryTable (org.sqlite.RS) trouvé.

J'ai jeté l'objet java Railo et je ne vois pas init() parmi les méthodes. Est-ce que je manque quelque chose de simple? J'aimerais aussi que cela fonctionne dans Railo.

Veuillez noter: Je fais une connexion sans DSN à une base de données SQLite. Je comprends comment configurer une source de données CF. Mon seul hiccup à ce stade est de faire la traduction d'un ensemble de résultats Java à une requête Railo.

+0

Cela peut être une question stupide - mais pourquoi n'utilisez-vous pas une source de données ColdFusion régulière et '' pour créer un résultat de requête? – Tomalak

+0

Voir: http://www.coldfusionjedi.com/index.cfm/2009/9/24/Hooking-up-ColdFusion-and-SQLite – Tomalak

+0

C'est probablement parce que QueryTable est une interface dans Railo. Donc vous ne pouvez pas l'instancier. (C'est une classe concrète dans Adobe CF). Je ne sais pas quelle classe concrète Railo utilise pour les requêtes, ou si elle est similaire à QueryTable dans Adobe CF. Mais, comme mentionné, est-il une raison pour laquelle vous ne pouvez pas utiliser une requête régulière? – Leigh

Répondre

5

En regardant le code source de Railo, je vois que railo.runtime.type.QueryImpl pourrait répondre à vos besoins. Il implémente railo.runtime.type.Query et accepte un ResultSet dans son constructeur, mais il ne semble pas implémenter QueryTable.

Si c'est la bonne classe, vous voudrez passer un ResultSet et une chaîne pour le nom de la requête, car il n'y a pas de constructeur qui ne prend qu'un ResultSet.

+0

C'est ce qu'il a fait. Le CFML résultant pour Railo est: \t \t \t \t \t

+3

C'est la beauté de l'open source. J'ai regardé le code source de Railo pour voir aussi comment ils génèrent des fichiers PDF en utilisant la balise cfdocument (il s'avère que Railo utilise pdf4ml). –