Запуск скрипта для создания таблиц с HSQLDB - PullRequest
7 голосов
/ 19 февраля 2010

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

Есть идеи?

Ответы [ 4 ]

4 голосов
/ 20 декабря 2010

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

2 голосов
/ 19 февраля 2010

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

1 голос
/ 19 февраля 2010

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

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

...