我正在尝试将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]
,但我一次只能为一列做这个。
不知道如何处理所有列。怎么能实现这个目标?
答案 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]