2013-01-19 31 views
0

在java中,如果我們想要導航使用2個按鈕向前和向後執行查詢所得到的結果集。我們可以執行此任務的方式是什麼使用向前和向後導航結果集

private void nextActionPerformed(java.awt.event.ActionEvent evt) {            
     if(evt.getSource()==bt_previous){ 
     DBUtil util = new DBUtil(); 
      try { 
         Connection con = util.getConnection(); 
         PreparedStatement stmt = con.prepareStatement("SELECT * FROM DETAILS where id=?"); 
         ResultSet rs; 
         String rm = id.getText().trim(); 
         stmt.setLong(1, Long.parseLong(rm)); 
         rs = stmt.executeQuery(); 
         while(rs.next()){ 

         String a = rs.getString("weight"); 
         txtboxwgt.setText(a); 
         String b = rs.getString("note_state"); 
         cbnotstat.setSelectedItem(b); 
         String c = rs.getString("dm_state"); 
         cbdmnstat.setSelectedItem(c); 
             } 
        } catch (Exception e) { 
          JOptionPane.showMessageDialog(null, e.getMessage()); 
         } 
      } 


     } 

回答

1

做一個實體類Detail

public class Detail { 
    private String weight; 
    private String noteState; 
    private String dmState; 

    public Detail() { 

    } 

    public Detail(String weight, String noteState, String dmState) { 
     this.weight = weight; 
     this.noteState = noteState; 
     this.dmState = dmState; 
    } 
    // getters and setters below 
} 

在你nextActionPerformed方法,當你遍歷結果集,創建實體的新實例,並將其添加到一些集合,即LinkedList

   List<Detail> allDetails = new LinkedList<Detail>(); 
       while(rs.next()) { 

        String a = rs.getString("weight"); 
        String b = rs.getString("note_state"); 
        String c = rs.getString("dm_state"); 
        allDetail.add(new Detail (a, b, c)); 
       } 

然後,您可以以LinkedList支持的任何方式導航allDetails。或者考慮使用另一個集合,如果LinkedList不適合您的需求。

1

您需要爲結果分頁。 AFAIK使用結果集沒有簡單的任務,沒有內置功能。 您有以下選擇:

  1. 變換每一行介紹一個對象,實際上顯示的對象。保留目前顯示的頁面列表,並根據需要提供它們(用於後退)並使用結果集轉發。但是,這有其侷限性:如果有足夠的對象,則可能會達到系統內存的限制,因此除非知道有少量對象,否則不推薦使用它。

  2. 使用額外的數據庫表分頁。 爲此創建一個附加表格:page,item_id。將其命名爲history_table。然後讀取前50個對象(假設您想一次顯示50行)。這是第1頁。在歷史記錄表中插入唯一標識符以及頁碼。 當需要倒退時,請閱讀前一頁中的唯一ID。當前進時,執行選擇。

的前進應該是這樣的SQL語句:

select * from my_table a where not exists (select 1 from history_table h where a.item_id = h.item_id) 

這個你執行所需的每一頁(甚至是第一個!)

插入在以前的讀元件數據庫應該使用batch insert來完成。