gpt4 book ai didi

spring - 使用 SimpleJdbcTestUtils.executeSqlScript() 时的 HSQLDB 触发语句错误

转载 作者:行者123 更新时间:2023-12-04 05:55:46 25 4
gpt4 key购买 nike

我目前正在尝试加载一个 sql 脚本来创建一个 HSQL 数据库。
这是通过使用以下代码完成的:

Resource resource = new ClassPathResource("/create-table.sql");        
SimpleJdbcTestUtils.executeSqlScript(template, resource, Boolean.FALSE);

该脚本包含触发器的创建语句:
CREATE TRIGGER t BEFORE UPDATE ON SUBJECTS 
REFERENCING NEW AS newrow OLD AS oldrow
FOR EACH ROW
BEGIN ATOMIC
SET newrow.VERSION = oldrow.VERSION + 1;
END;

使用此代码运行测试时,出现以下错误:
Caused by: java.sql.SQLException: Unexpected end of command: REFERENCING in statement   
[CREATE TRIGGER t BEFORE UPDATE ON SUBJECTS REFERENCING]
at org.hsqldb.jdbc.Util.sqlException(Unknown Source)
at org.hsqldb.jdbc.jdbcStatement.fetchResult(Unknown Source)
at org.hsqldb.jdbc.jdbcStatement.executeUpdate(Unknown Source)
at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228)
at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228)
at org.springframework.jdbc.core.JdbcTemplate$1UpdateStatementCallback.doInStatement(JdbcTemplate.java:508)
at org.springframework.jdbc.core.JdbcTemplate$1UpdateStatementCallback.doInStatement(JdbcTemplate.java:1)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:395)

我使用的是 Spring 3.0.5,HSQLDB(驱动程序,...)版本是 1.8.0.10。

有没有人遇到过这个问题或知道如何解决这个问题?

(我也尝试将所有内容放在一行,将 sql 放在一个单独的文件中,删除分号,...)

任何帮助将不胜感激。提前谢谢!

温迪。

最佳答案

触发器的定义并不完全正确。
解决方案变成了给定答案的混合:

按照@fredt 的建议将 HSQLDB 的版本更新到 2.2.8。
我稍微改变了创建脚本:

CREATE TRIGGER t BEFORE UPDATE ON SUBJECTS 
REFERENCING NEW AS newrow OLD AS oldrow
FOR EACH ROW
SET newrow.VERSION = oldrow.VERSION + 1;

现在没有关于分号等的提示。

感谢@Adi 和@fredt 的帮助!

温蒂

关于spring - 使用 SimpleJdbcTestUtils.executeSqlScript() 时的 HSQLDB 触发语句错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9536381/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com