【问题标题】:DB2 Syntax Error in Java, Works Fine in SQL editorJava 中的 DB2 语法错误,在 SQL 编辑器中运行良好
【发布时间】:2013-07-17 20:53:01
【问题描述】:

我有以下 java 代码从传入的连接创建一个准备好的语句。这只是代码的一部分,为了匿名,我已经更改了表的名称。

private static final String preparedStatementSQL = "INSERT INTO TABLE (STORE_ID,"
        + "BRAND_NAME,BUSINESS_DATE,HOUR,FCST_SYSSLS_AMT,FCST_USERSLS_AMT,FCST_SYSTRN_CNT,"
        + "FCST_USERTRN_CNT,ACTION_TIMESTAMP) VALUES (?,?,?,?,?,?,?,?,(current timestamp))";

private PreparedStatement ps = null;

public TABLE(Connection con) throws SQLException{
    this.ps = con.prepareStatement(preparedStatementSQL);
}

当它运行以下行时:

this.ps = con.prepareStatement(preparedStatementSQL);

我收到以下 SQL 错误:

java.sql.SQLSyntaxErrorException: Syntax error: Encountered "HOUR" at line 1, column 67.

我将语句复制到我的 SQL 编辑器 (SQuirreL) 中并输入了一些虚构的值,它运行良好(没有语法错误!)。

这是一个 IBM DB2 数据库。

我尝试删除列名来做:

INSERT INTO TABLE VALUES (?,?,?,?,?,?,?,?,(current timestamp))

它解决了问题,但我必须让它使用 (COLUMNS) VALUES (?...) 格式。

有人有什么想法吗?

【问题讨论】:

  • HOUR 可能是一个保留字,在您的字符串常量中尝试\"HOUR\"。顺便说一句:current_timestamp 不需要括号。

标签: java sql jdbc db2


【解决方案1】:

HOUR DB2 中的保留字。名单是here

您应该在列列表中将双引号 (") 括起来。

TABLE 也是保留字。不过,我假设您在那里有一个真实的表名。

【讨论】:

  • 我之前尝试过,但认为它不起作用,因为我遇到了同样的错误。我现在意识到,当我把引号放在那里时,当我使用 dbunit 将我的输出与我在 xml 文件中的数据库快照进行比较时,稍后会在我的测试用例中抛出异常。看起来 dbunit 正在尝试执行与我将 xml 文件中的行插入到第二个内存数据库进行比较相同的插入操作,并且遇到了相同的错误。不要认为这会很容易解决......
猜你喜欢
  • 2020-09-17
  • 1970-01-01
  • 2021-02-23
  • 2014-11-08
  • 1970-01-01
  • 2019-10-19
  • 2020-06-27
  • 1970-01-01
  • 2014-12-25
相关资源
最近更新 更多