Groovy GString выпуски
Я хочу использовать макрос $ в Groovy GString. Когда я написал этот код
['cdata','tdata'].each {
def sql = "select * from $it_1"
}
я получаю сообщение об ошибке неизвестного свойства $it_
хорошо я переписываю
['cdata','tdata'].each {
def sql = "select * from ${it}_1"
}
тогда я получаю нежелательные кавычки в строке результата - "select * from 'cdata'_1"
Вопрос в том, как я могу использовать $-macro в GString для получения строки результата "select * from cdata_1"?
4 ответа
Вы можете использовать функцию расширения Sql Groovy, чтобы помочь здесь. Следующий код сделает свое дело:
['cdata','tdata'].each {table -> def sql = "select * from ${Sql.expand table}_1" }
Использование этого метода особенно важно, если у вас есть другие параметры в вашей 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 */
}
В приведенном выше примере все еще будет использоваться подготовленный оператор, а содержимое переменной 'name' будет по-прежнему обрабатываться как параметр (что помогает защитить вас от атак SQL-инъекций), но параметр табличной переменной будет расширен правильно.
Если кавычки не из вашей среды IDE или из того, в чем вы оцениваете свой код, вы можете сделать это:
['cdata','tdata'].each { def sql = "select * from ${it.replaceAll("'","")}_1" }
groovy:000> ['cdata','tdata'].each { def sql = "select * from ${it}_1"; println sql }
select * from cdata_1
select * from tdata_1
===> [cdata, tdata]
Я не вижу кавычек... вот почему я просил разъяснений
Реальный ответ был за вопросом, так что извините.
Groovy SQL делает параметризованный запрос из GString, поэтому после того, как я определил GString
def sql = "select * from ${it}_1";
Я передал его в Groovy SQL, и когда я попытался выполнить запрос, фактический запрос был
"select * from :?_1";
Конечно, это сводит MSSQL с ума.
Спасибо вам всем еще раз, может быть, кто-то найдет это полезным.