2012-08-01 42 views
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腳本中定義了上面的目標,它首先刪除表,然後創建它們。我希望ant在刪除表時忽略錯誤(即onerror =「continue」),但在表創建期間發生錯誤時拋出異常(即onerror =「abort」)。但它在「sql」標記中採用了事務行爲,因此它對所有事務都是常見的。在ant的同一個sql任務中,是否可以爲不同的事務提供不同的事務行爲?

我不想創建單獨的sql標記並重複數據庫細節。另外,我想通過文件執行sql。我怎樣才能通過螞蟻做到這一點?

+0

重複sql標記有什麼不好? – oers 2012-08-01 11:21:42

+0

我不喜歡給這些數據庫屬性兩次。有什麼辦法可以克服嗎?我不介意使用兩次sql標籤。 – Pranali 2012-08-01 13:07:00

回答

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