2011-08-03 3 views
1

У меня есть строгий скрипт, который вытягивает несколько полей из базы данных MYSQL и вставляет данные в таблицу HTML, вместе с этим я нахожу дату файлов lastModified() вставляются в базу данных.Использование Groovy для сортировки HTML-таблицы по датам lastModified()

Я нашел довольно похожую тему: «Сортировка файлов по lastModified()», однако моя проблема в том, что я никогда не получаю данные в карте или списке, вместо этого я создаю xml и вызываю запрос, используя sql.eachRow(query), чтобы вставить соответствующие поля в таблицу, а затем найдите дату lastModified() внутри самого xml.

Я не могу выполнить сортировку в своем запросе, потому что мне нужно получить дату lastModified() из оригинального скрипта. Поэтому у меня есть два вопроса: возможно ли сделать сортировку по последней измененной дате, используя настройку в моем коде, который я опубликовал? И если да, то где мне нужно будет выполнять сортировку так, чтобы она правильно сортировалась в таблице 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() 

ответ

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() 

Я не пробовал, но он должен делать то, что вы хотите сделать ... Дайте мне знать, если вы получаете какие-либо ошибки, и я улажу их ...

Конечно, загрузка всех строк в память не будет работать, если у вас есть тысячи и тысячи строк ... Если это так, то вы должны сохранить последнюю дату в базе данных и отсортировать результаты с помощью SQL-запроса

+0

Большое спасибо, я боялся, что мне нужно будет сделать что-то подобное, просто для ясности мне нужно также добавить мод в список? Я прошу, потому что я использую mod, чтобы получить lastModified time и fd, чтобы преобразовать эти времена в правильный формат даты и времени, который я действительно хочу отображать. Извините, я не могу проголосовать за это. По-видимому, у меня недостаточно репутации. – ThisIsImpossible

+0

Потому что вы хотите отсортировать по моду, но затем отобразить fd, поэтому вам нужен мод в списке, если карты. Вы могли бы избежать приклеивания fd там, и просто сделать преобразование в строку в цикле на основе row.fd –

+0

Ah получил его, поэтому способ форматирования даты не сортируется. – ThisIsImpossible

 Смежные вопросы

  • Нет связанных вопросов^_^