因此尝试将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:对不起,我的语言不好,但我不是母语人士
该错误表明ON查询中有一个意外的地方,而且查询本身看起来还不错,我想这是您在Java应用程序中构造查询方式的问题。您的查询中可能缺少一些空格。
ON
我的猜测是你有类似的东西
query = "SELECT * " + "FROM table1" + "JOIN table2 ON " //.....
缺少空格将使SQL:
SELECT * FROM table1JOIN table2 ON ....
对于解析器,这是完全有效的,直到遇到ON令牌(该令牌触发错误)为止。例如解析器识别它是一种SELECT与*(全部)列从table1JOIN与别名table2。解析期间,服务器不会检查表是否确实存在,因此它不会跳过table1JOIN不存在的事实。解析成功完成后进行检查。
SELECT
*
table1JOIN
table2