gmailRJ 2009-02-19 20:48
浏览 237
已采纳

wicket分页数据问题

请教啊

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

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

  • 写回答

3条回答 默认 最新

  • ChocooM 2009-02-20 09:43
    关注

    [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]

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。