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

Store DB columns values to string in Groovy

我正在尝试将 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],但我一次只能对一列执行此操作。

不知道如何处理所有列。如何实现?

Sql.rows(GString query) returns a 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() returns 多个结果,现在您有一个列表列表,其中每个列表仅包含值。

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

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]