Как избежать кавычек вокруг значений в jOOQ - PullRequest
0 голосов
/ 29 мая 2018

Я использую jOOQ в качестве построителя SQL, и я пытаюсь построить простой оператор обновления следующим образом:

DSL.using(SQLDialect.POSTGRES_9_5)
.update(table("Location"))
.set(field("speed"), 50)
.set(field("location"), "ST_PointFromText('POINT(-73 40)', 4326)")
.where(field("id").equal(1))
.getSQL(ParamType.INLINED);

Как видите, я использую Postgres и PostGIS, поэтому мне нужно вставитьместоположение с использованием метода PostGIS ST_PointFromText () .

Сгенерированный SQL выглядит следующим образом и завершается ошибкой, поскольку ST_PointFromText () заключен в одинарные кавычки:

update Location
set speed = 50, location = 'ST_PointFromText(''POINT(-73 40)'', 4326)' 
where id = 1

Запрос должен быть:

update Location
set speed = 50, location = ST_PointFromText('POINT(-73 40)', 4326)
where id = 1

Есть ли способ удалить кавычки вокруг ST_PointFromText () ?

1 Ответ

0 голосов
/ 29 мая 2018

Когда вы пишете что-то вроде этого в jOOQ:

.set(field("location"), "ST_PointFromText('POINT(-73 40)', 4326)")

Тогда значение, расположенное справа, будет считаться значением связывания.Если вы генерируете SQL со встроенными значениями связывания, он превращается в экранированный строковый литерал.В общем, вы захотите , потому что это правильное и ожидаемое поведение, если вы передаете значение в оператор (представьте иначе, риск внедрения SQL и т. Д.)

Если вы хотите добавить в запрос некоторую строку «обычного SQL», просто используйте DSL.field(String), например

.set(field("location", String.class), 
     field("ST_PointFromText('POINT(-73 40)', 4326)", String.class))

Обратите внимание, что требуются типы данныхиз-за этой проблемы .Я только что поставил String.class как фиктивный тип.Вам, вероятно, следует реализовать фактический конвертер / привязку , чтобы ваш тип данных POINT был чистым.

Для получения дополнительной информации о шаблонах простого SQL и простого SQL см. Следующие разделы руководства:

...