7

我使用hsqldb运行需要数据库访问的单元测试。

目前,当我想为特定测试创建表时,我有以下代码:

private void createTable() {
    PreparedStatement ps;
    try {
        ps = getConnection().prepareStatement("CREATE TABLE T_DATE (ID NUMERIC PRIMARY KEY, DATEID TIMESTAMP)");
        ps.executeUpdate();
    } catch (SQLException e) {
        e.printStackTrace();
    }
}

getConnection()方法检索在Spring上下文中定义的 DataSource:

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="org.hsqldb.jdbcDriver"/>
    <property name="url" value="jdbc:hsqldb:mem:memoryDB"/>
    <property name="username" value="SA"/>
    <property name="password" value=""/>
</bean>

现在,我想从一个 SQL 脚本创建我的表(当然,这个脚本将包含多个表创建):

CREATE TABLE T_DATE_FOO (ID NUMERIC PRIMARY KEY, DATEID TIMESTAMP);
CREATE TABLE T_DATE_BAR (ID NUMERIC PRIMARY KEY, DATEID TIMESTAMP);
...

我在 HSQLDB 文档中看到我可以让他在启动时运行一个脚本。但是,它不符合我的要求,因为我想在运行时运行脚本。

当然,我可以自己读取文件,并且对于每条 SQL 语句,我都会运行一个ps.executeUpdate()命令,但我不想使用这种解决方案(除非没有其他解决方案)。

任何想法?

4

4 回答 4

4

你可以org.hsqldb.util.SqlFile试一试。这门课似乎非常适合您的问题。

于 2010-12-20T08:10:40.473 回答
2

由于您已经在使用 spring,因此您可能希望使用SimpleJdbcUtils.executeSQLScript方法,该方法执行 SQL 脚本,其中语句用分号分隔。这个类在 spring-test 模块(JAR)中。

于 2010-02-19T10:28:21.110 回答
2

首先,我不知道这意味着什么。我很久以前就用过它,它对我有用。SQLExec 类来自 ant.jar,您可能可以查看 ant 源来创建自己的实用程序类,

SQLExec sqlExec=new SQLExec();
sqlExec.setUserid("user");
sqlExec.setPassword("passowrd");
sqlExec.setUrl("jdbc:mysql://localhost:3306/dbname");
sqlExec.setDriver("com.mysql.jdbc.Driver");
sqlExec.setProject(new Project());
sqlExec.setSrc(new File("c:/test.sql"));
sqlExec.execute();
于 2010-02-19T10:49:36.220 回答
0

我有同样的问题。我最终将文本文件拆分为 ; 并分别执行每条语句。没关系,因为我们没有插入,因此语句中没有分号。当时我还没有找到一种简单的方法来运行 SQL 脚本

于 2010-02-19T10:22:55.740 回答