wicket分页数据问题

请教啊

用dataview+ListDataProvider做分页,怎么才能做到每页显示几条数据就查几条数据,翻页的时候仍旧从上一页的记录中的最后一条记录的索引开始往下查?

避免一次性查出表里所有的数据

[code="java"]import java.io.Serializable;
import java.math.BigDecimal;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;

import org.apache.wicket.markup.repeater.data.IDataProvider;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;

/**

  • @author Dreamltf
    */
    public class Provider_Employee implements IDataProvider {

    private static final long serialVersionUID = 1;

    private List list = Collections.synchronizedList(new ArrayList());

    private Long followProject = Long.valueOf(0);

    public Provider_Employee() {
    super();
    }

    public Iterator iterator(int arg0, int arg1) {
    if (this.getFollowProject() != null
    && Long.valueOf(0).compareTo(this.getFollowProject()) < 0) {
    Connection conn = null;
    PreparedStatement pstmt = null;
    ResultSet rs = null;
    DB_Employee tempdbmap = null;
    try {
    conn = DbUtils.getConnection();
    pstmt = conn
    .prepareStatement(
    "SELECT * FROM DB_Employee WHERE followProject=?",
    ResultSet.TYPE_SCROLL_INSENSITIVE,
    ResultSet.CONCUR_READ_ONLY);
    pstmt.setBigDecimal(1, BigDecimal.valueOf(this
    .getFollowProject().longValue()));
    rs = pstmt.executeQuery();
    for (int i = arg0; i < arg0 + arg1; i++) {
    if (rs != null && rs.absolute(i + 1)) {
    tempdbmap = new DB_Employee();
    tempdbmap.setSerialID(Long.valueOf(rs.getLong(1)));
    tempdbmap.setFollowProject(Long.valueOf(rs.getLong(2)));
    list.add(tempdbmap);
    }
    }
    } catch (Exception e) {
    e.printStackTrace();
    } finally {
    if (pstmt != null) {
    try {
    pstmt.close();
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
    if (conn != null) {
    try {
    conn.close();
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
    }
    }
    return list.iterator();
    }

    public IModel model(Object arg0) {
    return new Model((Serializable) arg0);
    }

    public int size() {
    if (this.getFollowProject() != null
    && Long.valueOf(0).compareTo(this.getFollowProject()) < 0) {
    Connection conn = null;
    PreparedStatement pstmt = null;
    ResultSet rs = null;
    try {
    conn = DbUtils.getConnection();
    pstmt = conn
    .prepareStatement("SELECT COUNT(*) FROM DB_Employee WHERE followProject=?");
    pstmt.setBigDecimal(1, BigDecimal.valueOf(this
    .getFollowProject().longValue()));
    rs = pstmt.executeQuery();
    if (rs != null && rs.next()) {
    return rs.getInt(1);
    }
    } catch (Exception e) {
    e.printStackTrace();
    } finally {
    if (pstmt != null) {
    try {
    pstmt.close();
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
    if (conn != null) {
    try {
    conn.close();
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
    }
    }
    return 0;
    }

    public void detach() {
    this.list.clear();
    }

    public Long getFollowProject() {
    return followProject;
    }

    public void setFollowProject(Long followProject) {
    this.followProject = followProject;
    }

}

[/code]

显示数据时,要动态的记录当前页最后一条数据的rownum,然后下次查询显示从该rownum+1开始(每页显示的数据应该是一定的,如:每页20条数据)。

这个是一个dataview+ListDataProvider做的分页,供参考