使用@(at)符号的Firebird SQL查询 - 如何在JDBC(Jaybird)中运行查询?

时间:2013-01-04 16:16:42

标签: java sql jdbc firebird 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

问题是..我怎么能运行这个查询?如何替换@符号?

1 个答案:

答案 0 :(得分:4)

您无法直接使用Jaybird运行此查询。这些@ParamXXXX似乎是参数查询中的占位符。但Firebird和Jaybird支持这种类型的占位符(它们仅支持?作为DSQL中的占位符。)

要使用Jaybird执行此操作,您需要使用@ParamXXXX替换?的每个实例,并为PreparedStatement中的每个占位符设置正确的值,或者使用查询文本本身的实际值。

Firebird .NET提供程序确实支持@....样式的占位符(它将它们转换为Firebird样式的?占位符),因此如果不这样做,可以尝试使用C#/ .NET想要替换自己。

完全披露:我是Jaybird的开发者

相关问题