0
<target name="create-db-tables" depends="initialize">
        <fail message="Missing property [datasource.url]." unless="datasource.url" />
        <fail message="Missing property [db.user]." unless="db.user" />
        <fail message="Missing property [db.password]." unless="db.password" />
        <fail message="Missing property [db.sql.driver]." unless="db.sql.driver" />
        <sql driver="${db.sql.driver}" url="${datasource.url}" userid="${db.user}" password="${db.password}" output="${basedir}/createTable.log" onerror="continue">
<classpath>
    <pathelement location="${basedir}/../lib/ojdbc.jar"/>
</classpath>
            <transaction src="${basedir}/ddl/dropTables.sql" />
            <transaction src="${basedir}/ddl/createTables.sql" />
        </sql>
</target>

上記のターゲットを ant スクリプトで定義しています。これは、最初にテーブルを削除してから作成します。テーブルをドロップするときのエラー (つまり onerror="continue") を無視し、テーブルの作成中にエラーが発生したときに例外 (つまり onerror="abort") をスローするようにします。ただし、「sql」タグでトランザクションの動作を行うため、すべてのトランザクションに共通です。

個別の SQL タグを作成して DB の詳細を繰り返したくありません。また、ファイルを介してSQLを実行したい。どうすればアリを通してそれを行うことができますか?

4

1 に答える 1

0

私は単に次のようにします:

  1. 必要なセグメントごとにSQLタグを作成し、指定したプロパティを再利用するだけです(これは見苦しく複製されているように見えるかもしれませんが、機能します)
  2. sql タグの前にクラスパスを定義し、それを介して再利用しますclasspathref

次のようになります。

<target name="create-db-tables" depends="initialize">
        <fail message="Missing property [datasource.url]." unless="datasource.url" />
        <fail message="Missing property [db.user]." unless="db.user" />
        <fail message="Missing property [db.password]." unless="db.password" />
        <fail message="Missing property [db.sql.driver]." unless="db.sql.driver" />

        <classpath id="ojdbcpath">
             <pathelement location="${basedir}/../lib/ojdbc.jar"/>
        </classpath> 

        <!--- First Drop -->
        <sql driver="${db.sql.driver}" url="${datasource.url}"
            userid="${db.user}" password="${db.password}"
            output="${basedir}/createTable.log" onerror="continue"
            classpathref="ojdbcpath">
            <transaction src="${basedir}/ddl/dropTables.sql" />
        </sql>

        <!--- Then create -->
        <sql driver="${db.sql.driver}" url="${datasource.url}" 
            userid="${db.user}" password="${db.password}" 
            output="${basedir}/createTable.log" onerror="abort" 
            classpathref="ojdbcpath">
            <transaction src="${basedir}/ddl/createTables.sql" />
        </sql>
</target>
于 2012-08-01T13:21:34.603 に答える