3

ビルドに失敗することなく、データベース (接続) が存在するかどうかを ANT で確認する可能性はありますか?

例えば:

<target name="check-database-available">
    <sql
        classpath="${oracle.jar}" driver="oracle.jdbc.OracleDriver"
        url="jdbc:oracle:thin:@${my.db.host}:${my.db.port}:${my.db.sid}" 
        userid="${my.db.user}" 
        password="${my.db.pw}"
        onerror="continue" errorproperty="exit.status">
        select * from dual;
    </sql>
    <echo message="### exit status = ${exit.status}" />
</target>

これは常に BUILD FAILED で失敗し、

java.sql.SQLException: ORA-01017: invalid username/password; logon denied

データベースがまだ存在しないためです。「onerror」を「continue」に設定して「errorproperty」をチェックしても、タスクが実行されていないように見えるため機能しません。

4

2 に答える 2

1

Ant v 1.8.0 以降では、failOnConnectionError属性を SQL タスクで使用できます。

説明には次のように書かれています。

false の場合、タスクがデータベースへの接続に失敗した場合、警告メッセージのみを出力し、ステートメントを実行しません。

それはあなたの問題を解決するように見えます。

于 2010-08-09T03:10:20.127 に答える
1

db.present プロパティを設定する回避策を次に示します (checkpresence.sql は単純な選択ステートメントです)。

<target name="check-db-presence">
  <echo message="Checking database presence at: ${db.url}"/>
  <delete file="tmp/db.present"/>
  <sql driver="${db.driver}" url="${db.url}"
                     userid="${db.userName}" password="${db.password}"
                     failOnConnectionError="false" onerror="continue" warningproperty="db.empty" errorproperty="db.empty" 
                      src="scripts/${db.platform}/checkpresence.sql"
                    print="true" output="tmp/db.present"/>
  <condition property="db.present">
    <available file="tmp/db.present"/>
  </condition>
</target>
于 2011-02-04T22:50:58.130 に答える