【问题标题】:org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback;org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback;
【发布时间】:2019-02-12 19:07:19
【问题描述】:

我正在使用 Jdbc 模板将记录插入数据库。下面是导致错误的sql语句。

INSERT INTO table_name(PDDID, APPLICATION_CODE, STATUS,CREATED_TS) VALUES ( ?,?,?,SYSTIMESTAMP)

详细信息是:

PreparedStatementCallback; bad SQL grammar [

                    INSERT INTO table_name(PDDID, APPLICATION_CODE, STATUS,CREATED_TS) VALUES ( ?,?,?,SYSTIMESTAMP)

        ]

org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback;错误的 SQL 语法 [ INSERT INTO table_name (PDDID、APPLICATION_CODE、STATUS、CREATED_TS)值( ?,?,?,SYSTIMESTAMP)];嵌套异常是 java.sql.SQLSyntaxErrorException:ORA-00904:“PDDID”:无效 标识符

【问题讨论】:

  • 表的DDL是什么。您似乎没有列PDDID,可能是pddid(在这种情况下,您需要在查询中使用"pddid")?

标签: java jdbc spring-jdbc


【解决方案1】:

尝试重命名您的 pddid 字段或使用 "pddid" ,可能与 SQL pid 冲突。

【讨论】:

  • 鉴于这是 Oracle,引用将使用双引号完成,而不是使用反引号(这是 MySQL 与 SQL 标准的特定偏差)。
【解决方案2】:

我认为您必须输入一个有效的列名,因为它要么丢失要么输入无效。当您在 select 语句中引用无效别名时,最常见的“无效标识符”会发生。 Oracle 文档在 ORA-00904 错误中记录了这一点:

ORA-00904 字符串:无效标识符

原因:输入的列名丢失或无效。

输入一个有效的列名。有效的列名必须以字母开头,少于或等于 30 个字符,并且仅包含字母数字字符和特殊字符 $、_ 和 #。

如果包含其他字符,则必须用双引号括起来。它可能不是保留字。 为避免 ORA-00904,列名不能是保留字,并且必须包含以下四个条件才能有效:

以字母开头 少于或等于三十个字符 仅由字母数字和特殊字符 ($_#) 组成;其他字符需要双引号括起来。

【讨论】:

    【解决方案3】:

    检查列名“PDDID”是否正确。 将 '?' 替换为有效值后,您能否尝试直接在数据库客户端上运行此语句。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-09
      • 2013-02-04
      • 2020-04-30
      相关资源
      最近更新 更多