admin

Java / IBSQL中的SQL Firebird实现

sql

因此尝试将SQL代码放入我的Java应用程序中:

    SELECT DISTINCT
  StRzImRo.Rohstoff, StRo.Bezeichnung,
CAST (SUM(BwLsImAt.Lieferungen * StRzImRo.Menge * StAt.PROD__REZEPTURGEWICHT / Coalesce(StRz.PARM__BEZUGSGROESSE,1))  AS NUMERIC (9,3)) Rohstoffverbrauch_Gesamt FROM BwLsImAt

JOIN StAt ON (StAt.IntRowId = BwLsImAt.Artikel)
JOIN StRz ON (StRz.IntRowId = StAt.PROD__REZEPTUR)
JOIN StRzImRo ON (StRzImRo.Master = StRz.IntRowId)
JOIN StRo ON (StRzImRo.Rohstoff = StRo.IntRowId)
WHERE StAt.IntRowId > 0
 GROUP BY  StRzImRo.Rohstoff, StRo.Bezeichnung
-- GROUP BY  StRzImRo.Rohstoff, StRzImRo.Menge, StAt.PROD__REZEPTURGEWICHT, Coalesce(StRz.PARM__BEZUGSGROESSE,1)

该代码是完全功能性的,并已在IBSQL中进行了测试,但无法在我的Java应用程序中运行。我的应用程序可以与其他代码一起正常工作。我收到此错误:

org.firebirdsql.jdbc.FBSQLException: GDS Exception. 335544569. Dynamic SQL Error
SQL error code = -104
Token unknown - line 1, column 266
ON

如果有人可以帮助我解决这个问题,我将非常高兴。谢谢!PS:对不起,我的语言不好,但我不是母语人士


阅读 33

收藏
2021-06-07

共1个答案

admin

该错误表明ON查询中有一个意外的地方,而且查询本身看起来还不错,我想这是您在Java应用程序中构造查询方式的问题。您的查询中可能缺少一些空格。

我的猜测是你有类似的东西

query = "SELECT * " +
        "FROM table1" +
        "JOIN table2 ON " //.....

缺少空格将使SQL:

SELECT * FROM table1JOIN table2 ON ....

对于解析器,这是完全有效的,直到遇到ON令牌(该令牌触发错误)为止。例如解析器识别它是一种SELECT*(全部)列从table1JOIN与别名table2。解析期间,服务器不会检查表是否确实存在,因此它不会跳过table1JOIN不存在的事实。解析成功完成后进行检查。

2021-06-07