我使用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文档中看到我可以问他run a script at the startup.但是,它不符合我的要求,因为我想在运行时运行脚本.
当然,我可以自己读取文件,对于每个sql语句,我都运行一个ps.executeUpdate()命令,但我不想使用这种解决方案(除非没有其他解决方案).
任何的想法?
解决方法
因为您已经在使用spring,所以您可能希望使用执行sql脚本的
SimpleJdbcUtils.executeSQLScript方法,其中语句以分号分隔. 这个类是在spring-test模块(JAR)中.