我使用 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()
命令,但我不想使用这种解决方案(除非没有其他解决方案)
有什么想法吗?
答案 0 :(得分:4)
您可以尝试org.hsqldb.util.SqlFile
。这个课程似乎与您的问题完全匹配。
答案 1 :(得分:2)
因为您已经在使用spring,所以您可能希望使用执行SQL脚本的SimpleJdbcUtils.executeSQLScript方法,其中语句以分号分隔。 这个类在弹簧测试模块(JAR)中。
答案 2 :(得分:1)
首先,我不知道这个含义。我用它很久以后它对我有用。 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();
答案 3 :(得分:0)
我遇到了同样的问题。我最终分割了文本文件;并分别执行每个语句。没关系,因为我们没有插入,因此在语句中没有分号。我当时没有找到一种简单的方法来运行SQL脚本