将数据库列值存储到Groovy中的字符串

时间:2016-11-10 14:31:42

标签: sql groovy soapui

我正在尝试将Sql查询结果存储到字符串。

def DBlist = con.rows("select a.pkResourceItemsID,b.fieldValue,a.fkResourceID,a.fkCountryID,b.fkLocationID,b.fkBusinessUnitID,b.floor from tblResourceItems a inner join tblresourceitemData b on a.pkResourceItemsID=b.fkResourceItemID where a.pkResourceItemsID='$id'" )

log.info "DB_List = ${DBlist}"

我得到的结果:

DB_List =[[pkResourceItemsID:2000, fieldValue:Hello, fkResourceID:1, fkCountryID:1, fkLocationID:88, fkBusinessUnitID:518, floor:1]]

我想要的结果:

DB_List =[2000, Hello, 1, 1, 88, 518, 1]

我尝试过:

def a = DBlist.pkResourceItemsID

它给了我结果[2000],但我一次只能为一列做这个。

不知道如何处理所有列。怎么能实现这个目标?

1 个答案:

答案 0 :(得分:0)

Sql.rows(GString query)会返回List<GroovyRowResult>这就是为什么当您获得所返回对象的println时:

[[pkResourceItemsID:2000, fieldValue:Hello, fkResourceID:1, fkCountryID:1, fkLocationID:88, fkBusinessUnitID:518, floor:1]]

如果不是这样,只需要一个只包含结果值的列表,就可以对Sql.rows()方法调用返回的对象执行以下操作:

// for each row in the result list
def rowResults = DBlist.collect{ row ->
    // get only the column values
    row.keySet().collect { row[it] }
}

这是一种通用方法,因为rows()会返回多个结果,现在您有一个列表列表,其中每个列表只包含值。

如果您只对第一个结果感兴趣;获取该列表中的第一个对象:

println rowResults[0] 
// [2000, Hello, 1, 1, 88, 518, 1]

另一种方法:使用firstRow代替

如果您的查询仅设计为获得一个结果,请使用firstRow()代替rows(),这样您就可以直接使用GroovyRowResult代替List<GroovyRowResult>,并且那么你可以轻松获得没有列名的所有值:

def DBlist = con.firstRow("select a.pkResourceItemsID,b.fieldValue,a.fkResourceID,a.fkCountryID,b.fkLocationID,b.fkBusinessUnitID,b.floor from tblResourceItems a inner join tblresourceitemData b on a.pkResourceItemsID=b.fkResourceItemID where a.pkResourceItemsID='$id'" )

def rowValues = DBlist.keySet().collect { DBlist[it] }
println rowValues
// [2000, Hello, 1, 1, 88, 518, 1]