7

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()コマンドを実行しますが、この種のソリューションは使用したくありません(他にソリューションがない場合を除く)。

何か案が?

4

4 に答える 4

4

試してorg.hsqldb.util.SqlFileみてください。このクラスはあなたの問題に完全に一致しているようです。

于 2010-12-20T08:10:40.473 に答える
2

すでにSpringを使用しているため、ステートメントがセミコロンで区切られているSQLスクリプトを実行するSimpleJdbcUtils.executeSQLScriptメソッドを使用することをお勧めします。このクラスは、スプリングテストモジュール(JAR)に含まれています。

于 2010-02-19T10:28:21.110 に答える
2

まず第一に、私はこれの意味を知りません。私はそれが私のために働いた昔にそれを使用しました。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();
于 2010-02-19T10:49:36.220 に答える
0

私も同じ問題を抱えていました。結局、テキストファイルを;で分割しました。各ステートメントを個別に実行します。ステートメント内に挿入がなく、セミコロンがないため、問題ありませんでした。当時、SQLスクリプトを実行する簡単な方法が見つかりませんでした

于 2010-02-19T10:22:55.740 に答える