Запущение скрипта для составления таблиц с 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() метод получает DataSource, определенный в a Spring контекст:


    
    
    
    

Теперь, я хочу составить свою таблицу из сценария 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-оператора, я выполняю a ps.executeUpdate() команда, но я не хочу использовать этот вид решения (кроме того, если нет никакого другого решения).

Какая-либо идея?

7
задан Romain Linsolas 19 February 2010 в 10:14
поделиться

3 ответа

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

2
ответ дан 7 December 2019 в 05:21
поделиться

Во-первых, я не знаю последствий этого. Я использовал его давным-давно, и он работал для меня. Класс 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();
2
ответ дан 7 December 2019 в 05:21
поделиться

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

0
ответ дан 7 December 2019 в 05:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: