1

我有一个 groovy 脚本,它从 MYSQL 数据库中提取多个字段并将数据插入到 HTML 表中,同时我找到了lastModified()被拉入数据库的文件的日期。

我发现了一个非常相似的主题:“通过 lastModified() 对文件进行排序”,但是我的问题是我实际上从未将数据放入地图或列表中,而是构建了 xml 并调用查询sql.eachRow(query)以将正确的字段插入到表,然后lastModified()在 xml 本身中找到日期。

我无法在查询中进行排序,因为我必须lastModified()从 groovy 脚本中获取日期。所以我有两个问题,是否可以使用我发布的代码中的设置按上次修改日期进行排序?如果是这样,我需要在哪里实际执行排序,以便在 HTML 表上正确排序?我应该说我对 Groovy 和 Java 非常陌生,并且在试图弄清楚这些事情时很糟糕,所以任何关于你在哪里找到这些信息的提示都会很棒。

类似的主题,但不是我正在寻找的主题:

我的代码,我不得不改变一些东西:

sql = Sql.newInstance("location of database", "username", "password", "driver")
writer = new StringWriter()
def xml = new MarkupBuilder(writer)
rptDate = new java.util.Date()

query = 
"""
query stuff
"""
xml.html(){
xml.head(){
xml.title("Title")
xml.body(){
    xml.h1("Title")
    xml.table(border:1, cellpadding:5){
        xml.tr(){
            xml.th("ID")
            xml.th("Date Added")
            xml.th("Hospital Name")
            xml.th("Total Daily Clients")
            xml.th("Total Daily Pets")
            xml.th("Last Upload Date")//lastModified() date

            }//end headings

//insert data from query into each row of the table
    sql.eachRow(query)
      {row ->
         xml.tr(align:'center'){
            xml.td("${row.ID}")
            xml.td("${row.DateAdded}")
            xml.td("${row.HospitalName}")
            xml.td("${row.TotalDailyClients}")
            xml.td("${row.TotalDailyPets}")
                        //find lastModified() dates for incoming files and format them
            mod = new File("/home/me/folderforfiles/${row.ID}.zip").lastModified()
            fd = new Date(mod).format("EEE MMM dd hh:mm:ss a yyyy")
                       //insert into table
            xml.td(fd)
        }//end table data
    }//end loop
}//end table
}//end body
}//end title
}//end html
println writer.toString()
4

1 回答 1

2

如果您将 SQL 结果加载到List第一个,那么您可以对该映射进行排序,并遍历它以生成您的 XML:

sql = Sql.newInstance("location of database", "username", "password", "driver")
writer = new StringWriter()
def xml = new MarkupBuilder(writer)
rptDate = new java.util.Date()

query = 
"""
query stuff
"""

// Load the results into a list
List rows = sql.rows( query )

// Then manipulate the list to add the mod and fd fields
rows.collect { 
  mod = new File("/home/me/folderforfiles/${row.ID}.zip").lastModified()
  fd  = new Date(mod).format("EEE MMM dd hh:mm:ss a yyyy")
  it << [ mod:mod, fd:fd ]
}

// Then sort it based on this field
rows = rows.sort { it.mod }

xml.html(){
  head {
    title "Title"
  }
  body {
    h1 "Title"
    table(border:1, cellpadding:5) {
      tr {
        th "ID"
        th "Date Added"
        th "Hospital Name"
        th "Total Daily Clients"
        th "Total Daily Pets"
        th "Last Upload Date"
      } //end headings
      rows.each { row ->
        tr( align:'center' ) {
          td row.ID
          td row.DateAdded
          td row.HospitalName
          td row.TotalDailyClients
          td row.TotalDailyPets
          td row.fd
        }//end table data
      }//end loop
    }//end table
  }//end body
}//end html
println writer.toString()

我没有尝试过,但它应该做你想做的事......如果你有任何错误,请告诉我,我会解决它们......

当然,如果你有成千上万的行,将所有行加载到内存中是行不通的......如果是这种情况,那么你应该将 lastModified Date 存储在数据库中,并使用 sql 查询对结果进行排序

于 2011-08-03T19:45:33.860 回答