【问题标题】:Is there any wrong syntax in H2 SQL statement?H2 SQL 语句中是否有语法错误?
【发布时间】:2021-09-26 18:04:14
【问题描述】:

尝试使用内存中的 H2 DB 执行准备好的 SQL 语句。接收语法错误:

org.h2.jdbc.JdbcSQLSyntaxErrorException: Syntax error in SQL statement "INSERT INTO task7schema.courses (course_name) VALUES (?) returning[*] course_id;"; SQL statement:
INSERT INTO task7schema.courses (course_name) VALUES (?) returning course_id; [42000-200]

无法弄清楚语法有什么问题。任何帮助表示赞赏。

【问题讨论】:

标签: jdbc h2


【解决方案1】:

H2 仅支持符合标准的语法:

SELECT course_id FROM FINAL TABLE
    (INSERT INTO task7schema.courses (course_name) VALUES (?));

您问题的语法是特定于 PostgreSQL 的。由于 PostgreSQL 不支持标准的数据变更增量表,因此您需要为 H2 和 PostgreSQL 使用不同的 SQL。

JDBC 有自己或多或少的可移植方式来请求生成的密钥。您可以从语句或准备好的语句中显式请求它们(使用附加的Statement.RETURN_GENERATED_KEYS 参数或通过指定列的名称或序号索引)并使用getGeneratedKeys() 读取它们。

【讨论】:

    猜你喜欢
    • 2015-06-19
    • 2013-06-15
    • 2017-10-31
    • 1970-01-01
    • 1970-01-01
    • 2020-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多