2015-03-05 5 views
0

Я использую 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> 

ответ

1

CREATE TABLE заявления, которые были действительны с HSQLDB 1.8.0 остаются в силе. Это изменение относится к методу prepareStatement(), и теперь оно принимает только отдельные инструкции SQL. Вы все равно можете использовать createStatement() и Statement.execute(script) с несколькими операторами SQL.

+0

Большое спасибо! Я считал само собой разумеющимся, что проблема была версия hsqldb, моя ошибка! Я изменил заявление, как вы говорите, и он работает нормально. Благодарю. – troig

Смежные вопросы