У меня есть переменная String
из Java (например, str
), которая хранит какое-то выражение GString
, скажем, "SELECT ${path} path FROM dual"
, это абсолютно динамическая строка из пользовательского ввода, я не могу знать, сколько там будет ${}
.
И я не хочу использовать его в sql.rows()
с оценкой ${path}
по текущей привязке с использованием PreparedStatement
.
Проблема в следующем:
- Если я каким-то образом не преобразую
str
вGString
, он выдастSQLException
, потому что безPreparedStatement
нам нужно использовать кавычки вокруг'${path}'
. Но это небезопасно, и Groovy генерирует предупреждения (о том, что мы должны использоватьPreparedStatement
и убрать кавычки). - Если я преобразую
str
вGString
таким образом:sql.rows("${str}")
, то Groovy будет использовать совершенно неправильный подготовленный оператор, содержащий только"?"
, конечно, это не сработает, мне нужен оператор:"SELECT ? path FROM dual"
.
Вопрос в том, как мы можем получить GString
из String
, не обернув его "${}"
? Или как мы можем оценить только первый уровень GString
(только str
, а не path
)? Или как решить эту проблему другим способом?
Спасибо.
"SELECT '123' test\n, ${path} path FROM dual"
, окончательная GString должна выглядеть так:"SELECT '123' test\n, ${path} path FROM dual"
(точно так же, как String, мне нужно преобразовать ее без каких-либо изменений для использования вsql.rows
(и без оценки${path}
, конечно, потому что мне нужно использовать autosql.rows
механика подготовленного заявления). - person marshall   schedule 21.12.2014Eval.me(/"str"/)
будет оценивать только"str"
, аEval.me(str)
попытается оценить все словаstr
(дажеSELECT
и т. д.), и если он содержит,
, то groovy выдастgroovy: 1: unexpected token: ,
. Можете ли вы просто опубликовать проверенный код, который начинается сString str = 'SELECT '123' test\n, ${path} path FROM dual';
и заканчивается наsql.rows(GSTRING_FROM_STR)
?'
заключает в кавычкиString
, это важно. - person marshall   schedule 26.12.2014