我正在使用显示标签显示表它工作正常但我有新要求“我需要在第一行列中显示第二行列值,在第二行列中显示第三行值....即 对我来说,表格格式的数据如下:
Sr No. From Date To Date Duration(hh:mm:ss)
1 01-Nov-2013 12:17:00 PM 2d 20:23:22
2 04-Nov-2013 09:40:35 AM 01:20:37
3 04-Nov-2013 11:27:21 AM 05:23:35
但我需要表数据如下:
Sr No. From Date To Date Duration(hh:mm:ss)
1 01-Nov-2013 12:17:00 PM 04-Nov-2013 09:40:35 AM 2d 20:23:22
2 04-Nov-2013 09:40:35 AM 04-Nov-2013 11:27:21 AM 01:20:37
3 04-Nov-2013 11:27:21 AM 4th row 2nd column 05:23:35
可以帮助我如何做到这一点 详细地说,我写的java代码就是这个 StoppageDBReport.jsp:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib uri="http://displaytag.sf.net" prefix="display" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<link rel="stylesheet" href="css/displaytag.css" type="text/css">
<link rel="stylesheet" href="css/screen.css" type="text/css">
<link rel="stylesheet" href="css/site.css" type="text/css">
<link href="css/sty.css" rel="stylesheet" type="text/css" />
<link href="css/tabborder.css" rel="stylesheet" type="text/css" />
</head>
<body>
<jsp:include page="Header.jsp" />
<c:choose>
<c:when test="${not empty spdetails}">
<table id="display_table">
<tr ><td><b>Stoppage Details</b></td></tr>
<tr ><td><b><%=request.getParameter("vehicleId") %></b></td></tr>
<tr><td>From <%=session.getAttribute("fromdate") %> to <%=session.getAttribute("startdate") %></td></tr>
</table>
<display:table id="deviceDetailsID" name="sessionScope.spdetailsid" pagesize="10" export="true" sort="list">
<display:setProperty name="basic.empty.showtable" value="true" />
<display:setProperty name="paging.banner.group_size" value="10" />
<display:setProperty name="paging.banner.item_name" value="Record" />
<display:setProperty name="paging.banner.item_names" value="Records" />
<display:column property="serialID" title="Sl No" style="width: 3%"/>
<display:column property="deviceID" title="Device ID" style="width: 1%"/>
<display:column property="timestamp" title="From Date" format="{0,date,dd-MM-yyyy}"/>
<display:column property="timestamp" title="ToDate" />
<display:column property="statuscode" title="Status Code"/>
<display:column property="address" title="Address" />
</display:table>
</c:when>
<c:otherwise>
<jsp:include page="Pages/Stoppagebody.jsp"/>
<div id="MenuLineDiv" style="width:100%; height: 2px; font-size: 2px; background-color: #FFCD44; position: relative; top: 0px;"></div>
<table width="100%" border="1" cellpadding="0" cellspacing="0" bordercolor="#FFFFFF">
<tr class="topheader">
<td colspan="6" style="color:white;text-align:center;">Stoppage report for <%=request.getParameter("vehicleId") %> from <%=session.getAttribute("fromdate") %> to <%=session.getAttribute("startdate") %> </td>
</tr>
<tr class="secondhedr">
<td colspan="6" style="color:white;text-align:center;">No data found</td>
</tr>
</table>
</c:otherwise>
</c:choose>
<jsp:include page="Footer.jsp"/>
</body>
</html>
Dao对象:
public List<StoppageDetails> getSpDetails(String accountID,String deviceID,String Timestamp1,String Timestamp2) {
Connection con=null;
List<StoppageDetails> spdetails = new ArrayList<StoppageDetails>();
try{
con= DBConnectionFactory.getDBConnection();
String sql="SELECT accountID,deviceID,TIMESTAMP,address FROM eventdata WHERE (TIMESTAMP BETWEEN '"+Timestamp1+"' AND '"+Timestamp2+"') AND accountID='"+accountID+"' AND deviceID='"+deviceID+"'and speedKPH=0.0";
Statement st=con.createStatement();
ResultSet rs=st.executeQuery(sql);
int count=0;
System.out.println("::::"+rs.next());
while (rs.next()){
StoppageDetails ud=new StoppageDetails();
ud.setSerialID(count);
ud.setAccountID(rs.getString(1));
ud.setDeviceID(rs.getString(2));
String stringtimestamp=rs.getString(3);
long l=Long.parseLong(stringtimestamp);
long longtimestamp = l * 1000L;
String datestring= new java.text.SimpleDateFormat("dd/MM/yyyy HH:mm:ss").format(new java.util.Date(longtimestamp));
ud.setTimestamp(datestring);
String address=rs.getString(4);
String address1[]=address.split(" \\d");
ud.setAddress(address1[0]);
spdetails.add(ud);
count++;
}
}catch (Exception e) {
e.printStackTrace();
}
System.out.println(spdetails);
return spdetails;
}
控制器代码:
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try{
response.setContentType("text/html");
HttpSession session=request.getSession(true);
String accountID=(String)session.getAttribute("sessionId");
String deviceID=request.getParameter("vehicleId");
String fromdate=request.getParameter("AnotherDate");
String todate=request.getParameter("ADate");
session.setAttribute("vid",deviceID);
session.setAttribute("fromdate",fromdate);
session.setAttribute("startdate",todate);
SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
Date startD = (Date) sdf.parse(fromdate);
Date endD = (Date) sdf.parse(todate);
Calendar cal1 = Calendar.getInstance();
Calendar cal2 = Calendar.getInstance();
cal1.setTime(startD);
cal2.setTime(endD);
long timestamp1,timestamp2;
timestamp1=cal1.getTimeInMillis()/1000;
timestamp2=cal2.getTimeInMillis()/1000;
String Timestamp1 = Long.toString(timestamp1);
String Timestamp2 = Long.toString(timestamp2);
UserDAO rdao=new UserDAO();
List<StoppageDetails> spdetails=rdao.getSpDetails(accountID, deviceID, Timestamp1, Timestamp2);
session.setAttribute("spdetailsid", spdetails);
RequestDispatcher rd=request.getRequestDispatcher("StoppageDBReport.jsp");
rd.include(request,response);
return;
}catch (Exception e) {
// TODO: handle exception
}
}
}
Vo对象:
package com.preva.vo;
public class StoppageDetails {
private String accountID, deviceID,timestamp,address;
private int serialID;
public String getTimestamp() {
return timestamp;
}
public void setTimestamp(String timestamp) {
this.timestamp = timestamp;
}
public int getSerialID() {
return serialID;
}
public void setSerialID(int serialID) {
this.serialID = serialID;
}
public String getAccountID() {
return accountID;
}
public void setAccountID(String accountID) {
this.accountID = accountID;
}
public String getDeviceID() {
return deviceID;
}
public void setDeviceID(String deviceID) {
this.deviceID = deviceID;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
答案 0 :(得分:0)
使用自联接可以在mysql中执行此操作,但最简单的解决方案是从java中的列表中的下一个元素中读取该值。
这是来自您的控制器
List<StoppageDetails> spdetails=rdao.getSpDetails(accountID, deviceID, Timestamp1, Timestamp2);
for (int i = 0; i < spdetails.size() - 1; i++) {
StoppageDetails current = spdetails.get(i);
StoppageDetails next = spdetails.get(i+1);
current.setTimestamp2(next.getTimestamp());
}
答案 1 :(得分:0)
您可以使用这样的查询 -
SELECT t1.sr_no, t1.From_Date, t2.From_Date AS To_Date, Duration FROM table1 t1
LEFT JOIN (SELECT * FROM table1 ORDER BY sr_no) t2
ON t1.sr_no < t2.sr_no
GROUP BY
t1.sr_no
在此示例中,行按 Sr No。字段排序。