H2 SQL 语句中是不是有语法错误?
Posted
技术标签:
【中文标题】H2 SQL 语句中是不是有语法错误?【英文标题】: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]
无法弄清楚语法有什么问题。任何帮助表示赞赏。
【问题讨论】:
这是否回答了您的问题:Return primary key value generated by default in H2 database upon INSERT of new row, for UUID type column?该示例用于返回 UUID - 但如果您不使用 UUID,我希望它可以适应您的情况。 感谢您的指导。我会尝试朝那个方向挖掘。我的初始架构脚本包含“SERIAL”关键字,它似乎是 postgres 特定的。 【参考方案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()
读取它们。
【讨论】:
以上是关于H2 SQL 语句中是不是有语法错误?的主要内容,如果未能解决你的问题,请参考以下文章
SQL 语句 org.h2.jdbc.JdbcSQLException 中的语法错误:
org.h2.jdbc.JdbcSQLSyntaxErrorException:SQL 语句“CREATE[*] SCHEMA DATABASE”中的语法错误; SQL 语句: