Вам не нужно украшать строки чем-либо, чтобы они автоматически конвертировались в PreparedStatement
.
sql.execute("INSERT INTO TAB_A (F_A, F_B) VALUES ($value4fa, $value4fb)")
сделает все правильно для всех методов, которые принимают GString
в качестве одного параметра. обратите внимание на отсутствие {}
, который является синтаксическим сахаром для .toString()
Причина, по которой ваша жалоба вызвана тем, что
def query = "INSERT INTO TAB_A (F_A, F_B) VALUES (${value4fa}, ${value4fb})"
sql.execute(query)
отличается от передачи GString
непосредственно методу.
применяет подстановки перед , передавая query
методу .execute()
. Учитывая данные вашего примера, он передает следующее, и замены уже произошли. "INSERT INTO TAB_A (F_A, F_B) VALUES (I would like to get know, 2)"
, который даже не является допустимым оператором SQL, поскольку в строковом значении отсутствует '
вокруг него.
Это функционально эквивалентно использованию String.format()
, StringBuilder/Buffer.append()
или обычному при объединении с использованием +
.