2017-08-22 199 views
0

我试图迭代表数据并将表记录保存到Groovy Map中,但只有最后一条记录保存在地图中。Grails/Groovy - 在Map中返回MySQL记录只保留最后一条记录

服务守则员工的下面

class EmployeeService { 

    def dataSource 

    def printTable(){ 
     def sql = new Sql(dataSource) 
     def tableMap = [:] 
     int count=0 
     sql.eachRow("SELECT * FROM employee") { row -> 
      tableMap.'first_name' = row.first_name 
      tableMap.'last_name' = row.last_name 
      tableMap.'born' = row.born 
      print "\nIteration No " + count 
      count++ 
     } 
     sql.close() 
     for (e in tableMap) {print "key = ${e.key}, value = ${e.value}"} 
    } 

表中的记录:

enter image description here

这是该映射完成迭代后:

enter image description here

回答

2

试试这个

def list = [] 
    int count = 0 
    sql.eachRow("SELECT * FROM employee") { row -> 
     def tableMap = [:] 
     tableMap.'first_name' = row.first_name 
     tableMap.'last_name' = row.last_name 
     tableMap.'born' = row.born 
     list << tableMap 
     print "\nIteration No " + count 
     count++ 
    } 
    list.each { 
    for (def e in it) { 
     print "key = ${e.key}, value = ${e.value}" 
    } 
} 

您需要创建一个列表来存储所有地图,否则在地图旧值将被新值所取代。

+1

或者只是使用sql.rows()返回一个GroovyResultSet。不需要像这样循环每个结果。 –

+0

@aristotll,谢谢!!! –

相关问题