Firebird SQL Query со знаком @ (at) - Как выполнить запрос в JDBC (Jaybird)?
У меня есть приложение, которое использует Firebird. Приложение выполняет длинный список запросов, например, каждый раз, когда вы перечисляете свои элементы. Я хочу вынуть эти запросы и запустить их в своем собственном Java-приложении (чтобы я мог манипулировать списком, отображать его и т. Д.)
Проблема в том, что в приложении есть опция отладки, где вы можете увидеть, какие запросы выполняет ваше приложение. Некоторые оригинальные запросы получили @
приметы. Если я запускаю запрос с @
в нем я получаю ошибку. Если я уберу эту часть запроса, все работает и работает "как положено". Нет ошибок, как шарм.
Подробное сообщение об ошибке:
Код ошибки: -104
Токен неизвестен - строка 8, столбец 32
Мы используем IntelliJ IDEA, который автоматически применяет escape-символы при необходимости.
Такая часть из исходного запроса:
SELECT TBL4487."Id" "database.id",
TBL4487."Code" "database.code",
TBL4487."Name" "database.name",
TBL4487."Barcode" "database.barcode",
TBL4488."Name" "Datagroup",
TBL4489."Name" "Mey",
(SELECT FIRST 1 TBL4494."Price" / (CASE
WHEN (TBL4487."GrossPrices" = @Param4495) THEN 1
ELSE (TBL4492."Rate" + 100) / 100
END) "productprice.price"
FROM "ProductPrice" TBL4494
WHERE (TBL4494."Product" = TBL4487."Id") AND (TBL4494."PriceCategory" = @Param4497) AND (TBL4494."ValidFrom" <= @Param4498) AND (TBL4494."Currency" = @Param4499) AND (TBL4494."QuantityUnit" = TBL4487."QuantityUnit")
ORDER BY TBL4494."ValidFrom" DESC) "xyz",
(SELECT FIRST 1 TBL4500."Price" / (CASE
WHEN (TBL4487."GrossPrices" = @Param4501) THEN 1
ELSE (TBL4492."Rate" + 100) / 100
Вопрос в том... как я могу выполнить этот запрос? Как мне заменить @
условное обозначение?
1 ответ
Вы не можете запустить этот запрос напрямую с Jaybird. Эти @ParamXXXX
кажется, заполнители в запросе для параметров. Однако Firebird и Jaybird не поддерживают этот тип заполнителей (они поддерживают только ?
в качестве заполнителя в DSQL).
Чтобы выполнить это с Jaybird, вам нужно будет заменить каждый экземпляр @ParamXXXX
либо с ?
и установите правильное значение для каждого заполнителя в PreparedStatement
или с фактическим значением в самом тексте запроса.
Поставщик Firebird .NET поддерживает @....
в стиле заполнителей (переводит их в стиль Firebird ?
заполнители), так что вы можете попробовать вместо этого использовать C#/.NET, если вы не хотите заменять себя.
Полное раскрытие: я разработчик Jaybird