首页 > 解决方案 > H2中的MySQL分隔符

问题描述

我正在尝试在应用程序启动时初始化内存数据库 H2 中的数据。

我有一个很大的 sql 文件。一切都读得很好,直到它到达分隔符语句:

delimiter $
CREATE TRIGGER ins_sum BEFORE INSERT ON account
   FOR EACH ROW BEGIN INSERT INTO mytable(name) values (NEW.name);
END$
delimiter $
//ANOTHER TRIGGER

这是我看到的错误:

原因:org.h2.jdbc.JdbcSQLException:SQL 语句中的语法错误“delimiter[*] $.... 预期为“DELETE、DROP、DECLARE、DEALLOCATE、{”;SQL 语句:...

我已经通过属性文件设置了 MODE=MYSQL,以编程方式使用 DataSource,在 data.sql 文件本身中设置模式SET MODE MYSQL;

.yml 文件:

spring.datasource.url
=jdbc:h2:mem:mydb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE;MODE=MYSQL
spring.datasource.username: myusername
spring.datasource.password: mypassword
driver-class-name: org.h2.Driver

以编程方式:

@Bean
public DataSource dataSource() {
        EmbeddedDatabaseBuilder builder = new EmbeddedDatabaseBuilder();
        EmbeddedDatabase db = builder
            .setType(EmbeddedDatabaseType.H2)
            .setName("mydb;DATABASE_TO_UPPER=false;MODE=MYSQL")
            .addScript("data.sql")
            .build();
        return db;
}

我也尝试过完全删除分隔符,但在下一行失败了。

标签: mysqlh2

解决方案


推荐阅读