【问题标题】:Running a script to create tables with HSQLDB运行脚本以使用 HSQLDB 创建表
【发布时间】:2011-01-18 17:20:39
【问题描述】:

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

有什么想法吗?

【问题讨论】:

    标签: java sql hsqldb


    【解决方案1】:

    你可以试试org.hsqldb.util.SqlFile。这个类似乎非常适合您的问题。

    【讨论】:

    • sqltool 和 SqlFile 不在 Fedora hsqldb-2.4.0 包中,而且似乎不在源代码中。它似乎是一个单独的产品,可能与 Fedora 的许可不兼容。
    【解决方案2】:

    由于您已经在使用 spring,您可能希望使用 SimpleJdbcUtils.executeSQLScript 方法执行 SQL 脚本,其中语句用分号分隔。 此类在 spring-test 模块 (JAR) 中。

    【讨论】:

    • 这行得通,谢谢!但是,我不明白为什么 Spring 拒绝在几行中声明(即使末尾有 ;)...
    • 你使用哪个 executeSqlScript 方法?实现上有区别
    【解决方案3】:

    首先,我不知道这意味着什么。我很久以前就用过它,它对我有用。 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 脚本文件简单地初始化 hsqldb 数据库的 ant 文件会是什么样子?我正在构建使用 maven 的 openas2,但我可以添加 ant 作为构建要求并运行 ant 文件作为安装的一部分。
    • 我只是使用了一个实际的 ant 构建文件,它可以完美地运行任意 SQL 来初始化数据库:src.fedoraproject.org/rpms/openas2/blob/master/f/hsqldb.xml
    【解决方案4】:

    我遇到了同样的问题。我最终将文本文件拆分为 ;并分别执行每条语句。没关系,因为我们没有插入,因此语句中没有分号。我当时还没有找到运行 SQL 脚本的简单方法

    【讨论】:

    • 就我而言,拆分脚本会很容易,因为脚本并不复杂,也没有特定的字符。但是,如果它存在,我真的更喜欢更好的解决方案......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-16
    • 1970-01-01
    • 2011-04-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多