如何使用DB存储的GString定义生成运行时数据

时间:2018-01-30 03:22:40

标签: java groovy runtime gstring

您如何使用数据库存储的GString定义来动态生成数据。如果在代码

中定义了格式,我可以使用GString进行选择并选择行属性
code_format = "${-> row.ACCOUNT} ${-> row.ACCOUNT_OWNER}" 

但是,如果从数据库中提取相同的定义,则我的代码无效。

Sql sql = Sql.newInstance(url, login, password, driver);

sql.eachRow(SQL) { row ->
    code_format = "${-> row.ACCOUNT} ${-> row.ACCOUNT_OWNER}" 
    database_format = "${-> row.REPORT_ATTRIBUTES}"

    println "1-  " + code_format
    println "2-  " + database_format         
    println "CODE : " + code_format.dump()
    println "DB   : " + database_format.dump()

}   

当我运行此代码时,我得到以下输出;

1-  FlowerHouse Joe
2-  ${-> row.ACCOUNT} ${-> row.ACCOUNT_OWNER}
CODE : <org.codehaus.groovy.runtime.GStringImpl@463cf024 strings=[,  , ] values=[GString$_run_closure1_closure2@44f289ee, GString$_run_closure1_closure3@f3d8b9f]>
DB   : org.codehaus.groovy.runtime.GStringImpl@4f5e9da9 strings=[, ] values=[GString$_run_closure1_closure4@11997b8a]

1 个答案:

答案 0 :(得分:1)

row.REPORT_ATTRIBUTES 返回String,因为数据库不知道groovy stings格式。

GString是模板,可以从字符串创建。

所以你可以这样做:

def engine = new groovy.text.SimpleTemplateEngine()
println engine.createTemplate(row.REPORT_ATTRIBUTES).make([row:row]).toString()