在 ant 的同一个 sql 任务中,是否可以为不同的事务提供不同的事务行为

  • 本文关键字:事务 是否 sql 同一个 ant 任务 ant
  • 更新时间 :
  • 英文 :

<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 脚本中定义了上述目标,它首先删除表,然后创建它们。我希望 ant 在删除表时忽略错误(即 onerror="continue"(,但在创建表期间发生的错误时抛出异常(即 onerror="abort"(。但它采用"sql"标签中的事务行为,因此对于所有事务都是通用的。

我不想创建单独的 sql 标签并重复数据库详细信息。另外,我想通过文件执行sql。我怎样才能通过蚂蚁做到这一点?

我会简单地这样做:

  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>