2011-12-12 72 views
1

我正在編碼牆,並且我想要顯示所有內容到牆(評論和帖子等,如Facebook的牆)java/jsp如何反轉結果集?

我使用jsp打印出包含評論和帖子的html內容。

ResultSet wallrs = dbconnect.getWallResultset(); 
    if(wallrs!=null){ 
     while(wallrs.next()){ 
      %> 
      <br><b><%=wallrs.getString("navn")%></b> 
      <div style="max-width: 500px;"><br><%=wallrs.getString("besked") %></div> 
      <% 

      wallrsid = wallrs.getInt("id"); 
      ResultSet kommentarrs = dbconnect.getKommentarResultset(wallrsid); 

      if(kommentarrs!=null){ 
       while(kommentarrs.next()){ 
        %> 
        <Blockquote><b><%=kommentarrs.getString("navn") %>:</b> <%=kommentarrs.getString("kommentar") %></Blockquote> 
        <% 
       } 
      } 
      if(dbconnect.loggedIn){ 
      %> 
      <form id="<%= wallrsid%>"></form> 
      <button onclick="show_form('<%= wallrsid%>')">Kommenter</button> 
      <% 
      } 
     } 
     String message = request.getParameter("kommentar"); 
     if(message!=null){ 
      dbconnect.createComment(message, request.getRemoteAddr(), wallrsid); 
      System.out.println("Message: " + message + " Ip adresse: " + request.getRemoteAddr() + " Besked id: " + wallrsid); 
      message = null; 
     } 
    } 
    dbconnect.cleanUp(); 

這就是我正在處理的。它將它打印出來,所以新的評論得到的是底部而不是頂部。

我該如何反向?

我知道我可以循環的結果集到一個ArrayList和循環ArrayList的「倒退」但是,這似乎是一個消耗資源的方式,我認爲有可能是一個更好的辦法:)

回答

9

只要確保您提取評論的查詢最後有ORDER BY POSTDATE DESC,結果集將返回最近的評論。另外,對於非常大的結果集,它肯定會很有效,因爲真正的數據庫真的很擅長這種類型的東西。

+0

Sanjay說得對。您希望您的SQL服務器在幾乎所有關心訂購的情況下處理訂購。 –

0

您不能直接向後循環通過大多數ResultSets。你應該用ORDER BY來調整你的數據庫查詢。

通常你只能循環到下一行next()。根據連接的配置,您可以使用last()獲取最後一個條目,然後使用previous()檢索先前的結果。但請注意,這通常需要特殊配置。

檢查ResultSet documentation。遊標類型的定義通常取決於供應商。

我建議你在聲明中嘗試ORDER BY條款。