2011-12-01 1 views
3

J'utilise Groovy SQL dans une application Grails pour interroger une base de données qui n'est pas connectée en tant que source de données de l'application. Par défaut pour la page, l'instruction SQL select ne contient pas de clause order by. Si l'utilisateur clique sur l'un des tags, je souhaite modifier dynamiquement la requête à trier sur la colonne spécifiée dans la direction spécifiée. Lorsque j'essaie d'ajouter la clause order by à l'instruction select, j'obtiens une SQLException (interceptée) qui indique que ma requête a été mal terminée.Groovy SQL ignore la clause order by dans l'instruction select dynamique

Ma requête:

sql.eachRow("select * from mytable where type = 'SUMMARY' and acolumn=${columnValue} order by ${sortColumn} ${sortOrder}") { row -> 
        results << row.toRowResult() 
       } 

je peux contourner le problème en triant la liste retournée mais je voudrais le faire dans l'instruction SQL si possible. Est-ce un problème connu?

Répondre

7

Il est Groovy essayer de remplacer tous vos params avec ? et faire un PreparedStatement

Cela ne fonctionne pas avec la clause ORDER BY, vous devez use Sql.expand

Essayez:

sql.eachRow("select * from mytable where type = 'SUMMARY' and acolumn=${columnValue} order by ${Sql.expand(sortColumn)} ${Sql.expand(sortOrder)}") { row -> 
    results << row.toRowResult() 
} 
+0

Merci pour votre réponse rapide! J'avais le sentiment que la solution serait assez simple. –

+0

@ChrisDix Pas de soucis :-) Content de pouvoir aider :-) –