2015-09-04 46 views
1

我試圖執行一個常規的SQL在螞蟻從Ant屬性中常規使用SQL數據庫schema名稱

<target name="groovy_sql"> 
    <groovy> 
     import groovy.sql.Sql 
     def sql = Sql.newInstance(properties."master.jdbc_connection_string", properties."master.database_user", properties."master.database_password", "net.sourceforge.jtds.jdbc.Driver") 
     def table = '['+properties."app.database_name"+']..FILE_DATA' 
     def row = sql.firstRow("SELECT top 1 id from ${table} order by id desc") 
     properties."fileDataId" = row[0] 
    </groovy> 
    <echo message="fileDataId: ${fileDataId}"/> 
</target> 

選擇如下而我得到以下錯誤

[groovy] Sep 04, 2015 2:16:14 PM groovy.sql.Sql$AbstractQueryCommand execute 
[groovy] WARNING: Failed to execute: SELECT top 1 id from ? order by id desc because: Must declare the table variable "@P0". 

我想這個原因錯誤是表名不能作爲參數傳遞。 由於此腳本必須在不同的環境中運行,因此我們在不同的環境中使用不同的模式,因此我無法對模式名稱進行硬編碼,而且我很難找出解決方案。有人可以幫我解決這個問題嗎?

回答

1

您可以拆分字符串分配。首先從項目中讀取,然後連接。

下面是一個例子採取財產命令行

<?xml version="1.0"?> 
<project name="demo" basedir="." default="demo"> 

<taskdef name="groovy" 
classpath="${user.home}/.gvm/groovy/2.3.6/embeddable/groovy-all-2.3.6.jar" 
classname="org.codehaus.groovy.ant.Groovy" /> 

    <target name="demo"> 
     <!-- can load all props from a file here--> 
     <property name="table" value="hardcoded"/> 
     <groovy> 
      <arg value="hello1"/> 
      <arg value="hello2"/> 
      <arg value="hello3"/> 

      println args[0] 
      println args[2] 
      println 'projectName:'+ project.name 
      println project.getProperty("table") 

      def var="SELECT top 1 id from " + project.properties["table"] + " order by id desc" 
      println var; 

     </groovy> 

    </target> 


</project> 

我沒有SQL環境下測試,所以個人所得稅只是打印。從運行輸出

以下所示爲

$螞蟻

demo:                     
    [groovy] hello1                 
    [groovy] hello3                 
    [groovy] projectName:demo               
    [groovy] hardcoded                 
    [groovy] SELECT top 1 id from hardcoded order by id desc       

以命令行參數

$ ant -Dtable=newtable 


demo:                     
    [groovy] hello1                 
    [groovy] hello3                 
    [groovy] projectName:demo               
    [groovy] newtable                 
    [groovy] SELECT top 1 id from newtable order by id desc