when variable then example escape commands groovy gstring

variable - groovy when then



Problemas con Groovy GString (4)

Si las citas no son de su IDE, o de lo que sea que esté evaluando su código, puede hacer esto:

[''cdata'',''tdata''].each { def sql = "select * from ${it.replaceAll("''","")}_1" }

Quiero usar $ macro en Groovy GString. Cuando escribo este código

[''cdata'',''tdata''].each { def sql = "select * from $it_1" }

recibo una propiedad desconocida por error $ it_

vale, lo reescribo

[''cdata'',''tdata''].each { def sql = "select * from ${it}_1" }

entonces recibo comillas no deseadas en la cadena de resultados - "select * from ''cdata''_1"

¿La pregunta es cómo puedo usar $ -macro en GString para lograr la cadena de resultados "select * from cdata_1"?


groovy:000> [''cdata'',''tdata''].each { def sql = "select * from ${it}_1"; println sql } select * from cdata_1 select * from tdata_1 ===> [cdata, tdata]

No veo ninguna cita ... es por eso que estaba pidiendo una aclaración


Puede usar la función expandir Sql de Groovy para ayudar aquí. El siguiente código hará el truco:

[''cdata'',''tdata''].each {table -> def sql = "select * from ${Sql.expand table}_1" }

Usar este método es particularmente importante si tiene otros parámetros en su GString:

def name = ''Charlie Sheen'' def tables = [''normalPeople'',''crazyPeople''] tables.each { table -> def sqlString = "select * from ${Sql.expand table} where name = ${name}" /* Execute SQL here */ }

En el ejemplo anterior, se seguirá utilizando una declaración preparada, y el contenido de la variable ''nombre'' se manejará como un parámetro (lo que ayuda a protegerlo contra los ataques de inyección SQL) pero el parámetro variable de la tabla se expandirá correctamente.


La verdadera respuesta estaba detrás de la pregunta, así que lo siento.
Groovy SQL realiza consultas parametrizadas desde GString, por lo que después de haber definido GString

def sql = "select * from ${it}_1";

Lo pasé a Groovy SQL y cuando traté de ejecutar la consulta, la consulta real era

"select * from :?_1";

De cource, esto vuelve locos a MSSQL.
Gracias a todos ustedes otra vez, tal vez alguien encuentre esto útil.