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

Другие вопросы по тегам