0

我在 SQL Anywhere 11 DB 上有一个表,其中一列称为“日期”。我正在使用 jconnect JDBC 驱动程序从我的 Java 代码连接到数据库。我用双引号引用了“日期”列,如下所示。

SELECT inv."date" FROM DBA.acc_invoicereturn inv

我有 2 个数据库文件,一个是正在运行的 SQL Anywhere 11 实例的副本。另一个来自我卸载并重新加载(使用 dbunload)到 SA 11 数据库的 SQL Anywhere 5 数据库。当我在第一个实例上运行此查询时,它运行良好。但是,我升级的那个,我得到以下错误。

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)

这些数据库是部署在某些商店的计费系统的一部分。我认为这与我所做的数据库升级有关,但是在连接到一些生产实例时也遇到了同样的错误。

我认为这与quoted_string配置设置有关(我根本没有触及),但我不确定为什么它在第一种情况下有效,而不是在第二种情况下有效。

对此的任何帮助将不胜感激。

问候,Parikshit。

4

2 回答 2

0

DATE是 SQL 中的保留字。使用引号将其转义(不确定 SQL Anywhere 中的哪个),或者更好:重命名您的列名。Date不应该是列名。尝试 Billing_Date 或 Entry_Date 或类似的东西。

为了将来参考,这里是 SQL 中保留关键字的列表:https ://www.drupal.org/docs/develop/coding-standards/list-of-sql-reserved-words

希望这对您的问题有所帮助!

于 2017-01-24T12:00:59.740 回答
0

date可以通过在其中转义来用作列名[ ]

于 2017-07-25T06:31:25.513 回答