2

現在、SQLスクリプトをロードしてHSQLデータベースを作成しようとしています。これは、次のコードを使用して実行されます。

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

スクリプトには、トリガーのcreateステートメントが含まれています。

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)

私はSpring3.0.5を使用しており、HSQLDB(ドライバー、...)のバージョンは1.8.0.10です。

誰かがこの問題を抱えたことがあるか、これを解決する方法を知っていますか?

(また、すべてを1行に配置し、SQLを別のファイルに配置し、セミコロンを削除しました...)

どんな助けでも大歓迎です。よろしくお願いします!

ウェンディ。

4

3 に答える 3

3

トリガーの定義は完全には正しくありませんでした。解決策は、与えられた答えの組み合わせになりました:

@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の助けに感謝します!

ウェンディ

于 2012-03-07T08:59:50.357 に答える
0

変化する

SET newrow.VERSION = oldrow.VERSION + 1;

終わり;

SET newrow.VERSION = oldrow.VERSION + 1; END;

SimpleJdbcTestUtils';'を想定 スクリプトに存在する場合は区切り文字として。したがって、複数の「;」を含む単一のステートメントがある場合は、「;」の後に改行文字(\ n)がないことを確認する必要があります。

SimpleJdbcTestUtilsステートメントに複数の「;」が含まれている場合は、放棄することをお勧めします 。または、スクリプトにSQLコメントが含まれている場合(楽しみのために試してください)。別の方法として、これを確認してください。antライブラリを追加してもかまわない場合は、このアプローチをお勧めします。

于 2012-03-02T19:19:27.497 に答える
0

最新バージョンのHSQLDB(現在は2.2.8)を使用する必要があります。古いバージョンは、この形式のCREATETRIGGERをサポートしていません。

HSQLDB jarを変更した場合は、「;」の問題に関するAdiの推奨事項に従ってください。

于 2012-03-03T11:08:05.793 に答える