Я использую DBUnit
+ hsqlDB
для тестирования модулей базы данных. До сих пор мы использовали hsqldb
версии 1.8.0.10.Создание отчета об ошибках N таблиц DBUnit + HsqlDb (версия 2.3.2)
<dependency>
<groupId>org.hsqldb</groupId>
<artifactId>hsqldb</artifactId>
<version>1.8.0.10</version>
<scope>test</scope>
</dependency>
У нас есть несколько сценариев для создания схемы базы данных (которые создают несколько таблиц). Мы загружаем + выполняем эти сценарии через PreparedStatement. Что-то базовое:
@Test
public void testMultipleTablesError() throws Exception {
IDatabaseTester databaseTester = new JdbcDatabaseTester("org.hsqldb.jdbcDriver", "jdbc:hsqldb:mem:test");
Connection connection = databaseTester.getConnection().getConnection();
try {
String scriptDDL = "CREATE TABLE TABLE_A(A VARCHAR(10)); CREATE TABLE TABLE_B(B VARCHAR(10))";
PreparedStatement preparedStatement = connection.prepareStatement(scriptDDL);
preparedStatement.execute();
} catch (Exception ex) {
ex.printStackTrace();
} finally {
try {
connection.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
Это прекрасно работает с 1.8.0.10. Но если мы изменим к hsqldb
версии 2.3.2
мы получаем исключение при подготовке к Постулаты:
<dependency>
<groupId>org.hsqldb</groupId>
<artifactId>hsqldb</artifactId>
<version>2.3.2</version>
<scope>test</scope>
</dependency>
Caused by: org.hsqldb.HsqlException: palabra no esperado: CREATE
at org.hsqldb.error.Error.parseError(Unknown Source)
at org.hsqldb.ParserBase.unexpectedToken(Unknown Source)
at org.hsqldb.ParserCommand.compileStatement(Unknown Source)
Если мы изменим сценарий, чтобы создать только одну таблицу, она отлично работает в обеих версиях:
String scriptDDL = "CREATE TABLE TABLE_A(A VARCHAR(10))";
Anyone знает, изменился ли синтаксис для создания множества таблиц между версиями?
Спасибо за помощь заранее
EDIT: DBUnit
версия:
<dependency>
<groupId>org.dbunit</groupId>
<artifactId>dbunit</artifactId>
<version>2.5.0</version>
<scope>test</scope>
</dependency>
Большое спасибо! Я считал само собой разумеющимся, что проблема была версия hsqldb, моя ошибка! Я изменил заявление, как вы говорите, и он работает нормально. Благодарю. – troig