在SQL Anywhere 11

时间:2017-01-24 11:55:19

标签: java sqlanywhere jconnect

我在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配置设置(我根本没有触及)有关,但我不确定为什么它适用于第一种情况而不是第二种情况。

非常感谢任何帮助。

此致 帕里克希特。

2 个答案:

答案 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}}

中转义,用作列名