我有一个使用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
中的每个占位符设置正确的值,或者使用查询文本本身中的实际值。
Firebird . net提供程序支持@....
风格的占位符(它将它们转换为Firebird风格的?
占位符),所以你可以尝试使用c#/。如果你不想自己替换的话,请使用。NET。
全面披露:我是Jaybird