报错创建N表DBUnit + HsqlDb (v. 2.3.2)
Error statment creation N tables DBUnit + HsqlDb (v. 2.3.2)
我正在使用 DBUnit
+ hsqlDB
进行数据库单元测试。到目前为止,我们使用的是 hsqldb
版本 1.8.0.10。
<dependency>
<groupId>org.hsqldb</groupId>
<artifactId>hsqldb</artifactId>
<version>1.8.0.10</version>
<scope>test</scope>
</dependency>
我们有一些脚本来创建数据库模式(创建多个 tables)。我们通过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)
如果我们将脚本更改为只创建一个 table,它在两个版本中都可以正常工作:
String scriptDDL = "CREATE TABLE TABLE_A(A VARCHAR(10))";
有人知道 create many table 的语法在不同版本之间是否发生了变化吗?
提前感谢您的帮助
编辑:DBUnit
版本:
<dependency>
<groupId>org.dbunit</groupId>
<artifactId>dbunit</artifactId>
<version>2.5.0</version>
<scope>test</scope>
</dependency>
CREATE TABLE 对 HSQLDB 1.8.0 有效的语句仍然有效。更改与 prepareStatement()
方法有关,它现在只接受单个 SQL 语句。您仍然可以将 createStatement()
和 Statement.execute(script)
与多个 SQL 语句一起使用。
我正在使用 DBUnit
+ hsqlDB
进行数据库单元测试。到目前为止,我们使用的是 hsqldb
版本 1.8.0.10。
<dependency>
<groupId>org.hsqldb</groupId>
<artifactId>hsqldb</artifactId>
<version>1.8.0.10</version>
<scope>test</scope>
</dependency>
我们有一些脚本来创建数据库模式(创建多个 tables)。我们通过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)
如果我们将脚本更改为只创建一个 table,它在两个版本中都可以正常工作:
String scriptDDL = "CREATE TABLE TABLE_A(A VARCHAR(10))";
有人知道 create many table 的语法在不同版本之间是否发生了变化吗?
提前感谢您的帮助
编辑:DBUnit
版本:
<dependency>
<groupId>org.dbunit</groupId>
<artifactId>dbunit</artifactId>
<version>2.5.0</version>
<scope>test</scope>
</dependency>
CREATE TABLE 对 HSQLDB 1.8.0 有效的语句仍然有效。更改与 prepareStatement()
方法有关,它现在只接受单个 SQL 语句。您仍然可以将 createStatement()
和 Statement.execute(script)
与多个 SQL 语句一起使用。