如何读取第一行列中的第二行列值

时间:2013-11-14 07:23:09

标签: java mysql displaytag

我正在使用显示标签显示表它工作正常但我有新要求“我需要在第一行列中显示第二行列值,在第二行列中显示第三行值....即 对我来说,表格格式的数据如下:

 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 &nbsp;<%=session.getAttribute("fromdate") %>&nbsp;to&nbsp;<%=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;
    }



}

2 个答案:

答案 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。字段排序。