hsql 给出执行此语句的异常

Posted

技术标签:

【中文标题】hsql 给出执行此语句的异常【英文标题】:hsql gives exception executing this statement 【发布时间】:2018-06-05 17:47:48 【问题描述】:

我正在尝试使用内存中的 hsql db 为我的 Spring Cloud Task Batch 应用程序运行集成测试,它给了我执行此 db 语句的以下错误。该语句在 sqlserver db 中执行良好。我需要做一些语法更改吗?谢谢!

表创建查询

CREATE TABLE TASK_SEQ (
    ID BIGINT NOT NULL,
    UNIQUE_KEY CHAR(1) NOT NULL,
    constraint UNIQUE_KEY_UN unique (UNIQUE_KEY)
);

插入查询

INSERT INTO TASK_SEQ (ID, UNIQUE_KEY) select * from (select 0 as ID, '0' as UNIQUE_KEY) as tmp;

错误堆栈跟踪

Caused by:

org.springframework.jdbc.datasource.init.ScriptStatementFailedException:
  Failed to execute SQL script statement #1 of class path resource
  [schema-DML.sql]: INSERT INTO TASK_SEQ (ID, UNIQUE_KEY) select * from
  (select 0 as ID, '0' as UNIQUE_KEY) as tmp; nested exception is
  java.sql.SQLSyntaxErrorException: unexpected token: )     at
  org.springframework.jdbc.datasource.init.ScriptUtils.executeSqlScript(ScriptUtils.java:491)

【问题讨论】:

【参考方案1】:

您需要在 HSQLDB 中启用 SQL Server 兼容性。请参阅指南:

http://hsqldb.org/doc/2.0/guide/compatibility-chapt.html#coc_compatibility_mssql

您的陈述看起来过于复杂。像下面这样的东西应该适用于大多数数据库。

INSERT INTO TASK_SEQ (ID, UNIQUE_KEY) VALUES (0, '0') 

【讨论】:

以上是关于hsql 给出执行此语句的异常的主要内容,如果未能解决你的问题,请参考以下文章

HSQL 迭代 FOR 语句不起作用

HSQL - 意外的令牌:语句中的 PROCEDURE

HSQL SELECT 语句不起作用

语句中出现 HSQL 意外标记

java捕获到异常后,异常后的语句不会被执行

HSQL 和 Hibernate - 许多删除语句上的内存不足错误