2010-07-28 78 views
3

是否有可能在ANT中檢查數據庫(連接)是否存在而不失敗構建?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> 

這將始終失敗,並建立失效和

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

,因爲該數據庫尚不存在。將「onerror」設置爲「continue」並檢查「errorproperty」將不起作用,因爲任務看起來沒有被執行。

回答

1

從Ant v 1.8.0開始,您可以在SQL Task中使用failOnConnectionError屬性。

的描述如下:

如果爲false,將只顯示一條警告消息,並且如果該任務無法連接到數據庫中未執行任何聲明。

看起來它會解決你的問題。

+0

我使用的只是這個目的,但由於某些原因,errorproperty從未設置 - 意思是沒有辦法知道連接是否成功(沒有解決方法) – Rhubarb 2014-10-15 14:58:35

1

這是一種變通方法來設置一個db.present屬性(checkpresence.sql是一個簡單的SELECT語句)

<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> 
相關問題