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


        } 
4

2 回答 2

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)

您为所需的每个页面执行此操作(甚至是第一个页面!)

应该使用批量插入来在数据库中插入先前读取的元素。

于 2013-01-19T10:40:52.707 回答
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));
                }

然后,您可以allDetails通过 LinkedList. 或者,如果 LinkedList 不符合您的需求,请考虑使用另一个集合。

于 2013-01-19T10:42:30.890 回答