2010-07-28 89 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> 
相关问题