Запуск скрипта для создания таблиц с помощью 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-скрипт в то время