Другое решение с 2 условиями:
Желание удалить таблицу перед каждым созданием, при этом то же самое присутствует в файле .sql
Используя Spring и, следовательно, желая использовать spring-test в качестве зависимости Maven, ваша жизнь может стать намного проще с ее @ Sql аннотацией
Итак, сначала добавив это в качестве зависимости к вашему пом:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>4.2.5.RELEASE</version>
<scope>test</scope>
</dependency>
Во-вторых, если у вас есть SQL, который падает, создает таблицу в файле
rectangle.sql
DROP TABLE rectangles;
CREATE TABLE rectangles (
id INTEGER NOT NULL PRIMARY KEY,
width INTEGER NOT NULL,
height INTEGER NOT NULL
);
И у вас есть тестовый класс BlahTest, который должен запустить этот sql перед выполнением любого теста, просто добавьте следующую аннотацию @ Sql в ваш класс:
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.jdbc.Sql;
import org.springframework.test.context.jdbc.SqlConfig;
import org.springframework.test.context.jdbc.SqlConfig.ErrorMode;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes=XyzClientConfig.class)
@Sql(scripts="/sql/ddl/rectangle.sql", config=@SqlConfig (errorMode=ErrorMode.IGNORE_FAILED_DROPS))
public class BlahTest {
...
}
Указанное config значение атрибута @ SqlConfig обладает магией, которая заставляет его пропустить ошибки оператора отбрасывания в случае, если таблица не существует. Я полагаю, что он был написан специально для этих типов баз данных, которые не поддерживают IF EXISTS для удаления / создания таблиц (что действительно должно делать дерби, даже если он не является частью стандарта SQL в данный момент)