1

MYSQL データベースから多数のフィールドを取得し、データを HTML テーブルに挿入する groovy スクリプトがあります。これに加えて、データベースに取得されたlastModified()ファイルの日付を見つけます。

「lastModified()によるファイルの並べ替え」というかなり似たトピックを見つけましたが、私の問題は、実際にデータをマップまたはリストに取得することはなく、代わりにxmlを構築しsql.eachRow(query)、適切なフィールドをテーブルをlastModified()開き、xml 自体で日付を見つけます。

lastModified()Groovy スクリプトから日付を取得する必要があるため、クエリで並べ替えを実行できません。2 つの質問があります。投稿したコードの設定を使用して、最終更新日でソートすることは可能ですか? もしそうなら、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 に答える