我在SQL Anywhere 11 DB上有一个表,其中一列被称为“date”。我正在使用jconnect JDBC驱动程序从我的Java代码连接到数据库。我引用了带有双引号的“日期”列,如下所示。
SELECT inv."date" FROM DBA.acc_invoicereturn inv
我有2个数据库文件,其中一个是正在运行的SQL Anywhere 11实例的副本。另一个来自SQL Anywhere 5 DB,我将其卸载并重新加载(使用dbunload)到SA 11 DB中。当我在第一个实例上运行此查询时,它运行正常。但是,我升级的那个,我得到以下错误。
com.sybase.jdbc3.jdbc.SybSQLException: SQL Anywhere Error -131: Syntax error near 'date' on line 4
at com.sybase.jdbc3.tds.Tds.a(Unknown Source)
at com.sybase.jdbc3.tds.Tds.nextResult(Unknown Source)
at com.sybase.jdbc3.jdbc.ResultGetter.nextResult(Unknown Source)
at com.sybase.jdbc3.jdbc.SybStatement.nextResult(Unknown Source)
at com.sybase.jdbc3.jdbc.SybStatement.nextResult(Unknown Source)
at com.sybase.jdbc3.jdbc.SybStatement.queryLoop(Unknown Source)
at com.sybase.jdbc3.jdbc.SybStatement.executeQuery(Unknown Source)
at com.sybase.jdbc3.jdbc.SybPreparedStatement.executeQuery(Unknown Source)
这些数据库是部分商店中部署的计费系统的一部分。我认为这与我做的db升级有关,但是,我在连接到某些生产实例时遇到了同样的错误。
我认为这与quoted_string
配置设置(我根本没有触及)有关,但我不确定为什么它适用于第一种情况而不是第二种情况。
非常感谢任何帮助。
此致 帕里克希特。
答案 0 :(得分:0)
DATE
是SQL中的保留字。使用引号(不确定SQL Anywhere中的哪个)来转义它,或者更好的是:重命名列名。 Date
不应该是列名。尝试Billing_Date或Entry_Date或类似的东西。
为了将来参考,这里是SQL中保留关键字的列表:https://www.drupal.org/docs/develop/coding-standards/list-of-sql-reserved-words
希望这有助于解决您的问题!
答案 1 :(得分:0)
[
可以在]
{{1}}