2015-09-04 47 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