运行脚本以使用HSQLDB创建表

我使用hsqldb来运行需要数据库访问的unit testing。

目前,当我想为特定测试创建表时,我有以下代码:

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:

       

现在,我想从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()命令,但我不想使用这种解决方案(除非没有其他解决方案)。

任何想法?

因为您已经在使用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脚本