簡體   English   中英

使用@(at)符號的Firebird SQL查詢 - 如何在JDBC(Jaybird)中運行查詢?

[英]Firebird SQL Query with @ (at) sign - How to run the query in JDBC (Jaybird)?

我有一個使用Firebird的應用程序。 應用程序會執行一長串查詢,例如每次列出項目時。 我想取出這些查詢,並在我自己的Java應用程序中運行它們(所以我可以操作列表,顯示它,等等。)

問題是......應用程序中有一個調試選項,您可以在其中查看應用程序運行的查詢類型。 一些原始查詢得到@符號。 如果我在其中運行帶有@的查詢,則會出錯。 如果我取出查詢的那一部分,一切都運行並按預期工作。 沒有錯誤,就像一個魅力。

詳細錯誤消息:
錯誤代碼:-104
令牌未知 - 第8行,第32列

我們使用IntelliJ IDEA,它會在需要時自動應用轉義字符。
來自原始查詢的這樣一部分:

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

問題是..我怎么能運行這個查詢? 如何更換@符號?

您不能直接使用Jaybird運行此查詢。 這些@ParamXXXX似乎是參數查詢中的占位符。 然而,Firebird和Jaybird支持這種類型的占位符(它們僅支持?作為DSQL中的占位符)。

要使用Jaybird執行此操作,您需要將@ParamXXXX每個實例替換為? 並在PreparedStatement為每個占位符設置正確的值,或者在查詢文本本身中設置實際值。

火鳥.NET提供程序不支持@....風格的占位符(它並將它們轉換為火鳥風格?占位符),所以你可以嘗試使用C#/。NET,而是如果你不想做的更換自己。

完全披露:我是Jaybird的開發者

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM