如果满足条件,则退出 H2 sql 脚本
exit from H2 sql script if a condition is met
我正在尝试在满足条件时退出 H2 初始化脚本。
这完全有可能使用 H2 数据库吗?
SET @COUNT = SELECT COUNT(*) AS count FROM information_schema.tables WHERE table_name = 'T_TABLE';
IF (@COUNT > 0) THEN RETURN;
我正在测试中初始化这样的数据。
@BeforeEach
public void setup() {
if (db != null)
return;
db = new EmbeddedDatabaseBuilder()
.setType(EmbeddedDatabaseType.H2)
.addScript("db-schema.sql")
.build();
given(builder.build()).willReturn(db);
sut = new GPSOrderRepository(
builder,
sequenceService
);
}
不幸的是,每次测试都在数据库上执行脚本,但脚本会创建表,因此当脚本已经执行时会在后续测试中抛出错误。
H2目前不支持语句的条件执行。
因此您需要检查 Java 代码中的对象是否存在,或者如果您只使用支持此类子句的命令,则可以尝试将 IF NOT EXISTS
子句添加到所有命令中。
CREATE TABLE IF NOT EXISTS TABLE_NAME(...);
ALTER TABLE TABLE_NAME ADD CONSTRAINT IF NOT EXISTS CONSTRAINT_NAME ...;
我正在尝试在满足条件时退出 H2 初始化脚本。
这完全有可能使用 H2 数据库吗?
SET @COUNT = SELECT COUNT(*) AS count FROM information_schema.tables WHERE table_name = 'T_TABLE';
IF (@COUNT > 0) THEN RETURN;
我正在测试中初始化这样的数据。
@BeforeEach
public void setup() {
if (db != null)
return;
db = new EmbeddedDatabaseBuilder()
.setType(EmbeddedDatabaseType.H2)
.addScript("db-schema.sql")
.build();
given(builder.build()).willReturn(db);
sut = new GPSOrderRepository(
builder,
sequenceService
);
}
不幸的是,每次测试都在数据库上执行脚本,但脚本会创建表,因此当脚本已经执行时会在后续测试中抛出错误。
H2目前不支持语句的条件执行。
因此您需要检查 Java 代码中的对象是否存在,或者如果您只使用支持此类子句的命令,则可以尝试将 IF NOT EXISTS
子句添加到所有命令中。
CREATE TABLE IF NOT EXISTS TABLE_NAME(...);
ALTER TABLE TABLE_NAME ADD CONSTRAINT IF NOT EXISTS CONSTRAINT_NAME ...;