Запуск скрипта для создания таблиц с помощью HSQLDB

Я использую 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 контекст:

<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() command, но я не хочу использовать такое решение (за исключением случаев, когда нет другого решения).

есть идеи?

4 ответов


поскольку вы уже используете spring, вы можете использовать SimpleJdbcUtils.executeSQLScript метод, который выполняет сценарий SQL, где операторы разделены точкой с запятой. этот класс находится в модуле spring-test (JAR).


вы можете org.hsqldb.util.SqlFile попробовать. Этот класс, кажется, идеально подходит для вашей проблемы.


прежде всего, я не знаю последствий этого. Я использовал его долгое время назад, это сработало для меня. Класс 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();

У меня была та же проблема. В итоге я разделил текстовый файл на ; и выполнил каждый оператор отдельно. Это было нормально, потому что у нас не было вставок, поэтому нет точек с запятой внутри операторов. Я не нашел простой способ запустить SQL-скрипт в то время