• 关于easyui-datagrid数据表格, 分页取出数据


    在制作数据表格的时候有一个这样的属性, pagination是否显示分页列表, 分页显示的时候需要分别从数据库中取数据, 每页显示几行, 即只从数据库取出几行数据来显示, 具体代码如下

    1, 显示页面

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>数据表格</title>
    <script type="text/javascript" src="js/jquery-1.11.3.min.js"></script>
    <link rel="stylesheet" type="text/css" href="jquery-easyui-1.4.4/themes/default/easyui.css"></link>
    <link rel="stylesheet" type="text/css" href="jquery-easyui-1.4.4/themes/icon.css"></link>
    <script type="text/javascript" src="jquery-easyui-1.4.4/jquery.easyui.min.js"></script>
    <script type="text/javascript" src="jquery-easyui-1.4.4/locale/easyui-lang-zh_CN.js"></script>
    
    <script>
    $(function() {
        $("#tab1").datagrid({
            title:"地区列表二",
            url:"MembersList?parentid=90",
            idField:"id",      //指明哪个字段是标识字段
            singleSelect:false,      //指定是否只可以单选
            frozenColumns:[[{field:"",title:"",checkbox:true},{field:"id",80,title:"ID"}]],         //冻结某一列不随滚动条滚动
            columns:[[
                      {field:"parentId",80,title:"parentId"},
                      {field:"name",80,title:"name"},
                      {field:"postCode",80,title:"postCode"}
            ]],
            collapsible:true,      //是否折叠
            500,        //整个表宽
            fitColumns:true,       //是否适应表的宽度
            striped:true,     //斑马线
            rownumbers:true,     //每一列的序列号
            pagination:true,     //是否出现分页工具栏
            pageNumber:3,       //打开页面首先显示哪一页
            pageSize:10,      //页面打开时显示的每页显示的数据条数
            pageList:[10,20,30,40,50],        //分页列表选项, 按每页显示多少内容
            sortName:"id",      //按哪一列进行排序
            sortOrder:"asc",    //定义是顺序排列还是倒序
            remoteSort:false,    //取消从服务器排序, 如果要让数据这这里排序这个属性必须设置为false
            loadMsg:"正在加载啊......"
        });
    });
    </script>
    </head>
    <body>
    <br>
    <table id="tab1">
    </table>
    </body>
    </html>

    2, Servlet控制层

        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            request.setCharacterEncoding("utf-8");
            response.setCharacterEncoding("utf-8");
            response.setContentType("text/html; charset=utf-8");
            String pagenum = request.getParameter("page");
            String rows = request.getParameter("rows");
            int ipagenum = Integer.parseInt(pagenum);
            int irows = Integer.parseInt(rows);
            String str1 = "";
            try {
                MemberDal m = new MemberDal();
                ArrayList<Memberclass> array =  m.getList(ipagenum,irows);    //返回所显示数据的方法
                if(array!=null) {int x = m.getCount();     //取出返回几行数据的方法
                    str1 = "{"total":"+x+","rows":" + JSON.toJSONString(array) + "}";
                }
            }
            catch (Exception e) {
            }
            response.getWriter().append(str1);
        }

    3, 类方法体

        public ArrayList<Memberclass> getList(int page,int rows) throws Exception {
            ArrayList<Memberclass> rst = null;
            Connection con = Dbhelper.getConnection();
            PreparedStatement p = null;
            ResultSet rs = null;
            if(con!=null) {
                try {
                    int maxrows = page * rows;
                    //oracle查询语句
                    String sql = "select * from (select t.*, rownum as rnum from member t where ROWNUM <= ?) where rnum > ?";
                    p = con.prepareStatement(sql);
                    p.setInt(1, maxrows);
                    p.setInt(2, maxrows-rows);    //只固定的取出rows行数据, maxrows-rows在数据库中代表的都是行号,是第几行, 并不是取出几行数据, 理解了这一点就简单了
                    rs = p.executeQuery();
                    rst = new ArrayList<Memberclass>();
                    if(rs!=null) {
                        while(rs.next()) {
                            Memberclass place = new Memberclass();
                            place.setId(rs.getInt("id"));
                            place.setParentId(rs.getInt("parentid"));
                            place.setName(rs.getString("name"));
                            place.setPostCode(rs.getString("postcode"));
                            rst.add(place);
                        }
                    }
                }
                catch(Exception e) {
                    System.out.println(e);
                }
                finally {
                    try {
                        p.close();
                    }
                    catch(Exception e1) {
                        System.out.println(e1);
                    }
                    finally {
                        try {
                            con.close();
                        }
                        catch(Exception e2) {
                            
                        }
                        finally {
                            rs.close();
                        }
                    }
                }
            }
            return rst;
        }
    
    
    
        public int getCount() throws Exception{
            int rtn = 0;
            Connection conn = Dbhelper.getConnection();
            PreparedStatement pst = null;
            ResultSet rs = null;
            if(conn!=null) {
                try {
                    String sql = "select count(1) as c from member";
                    pst = conn.prepareStatement(sql);
                    rs = pst.executeQuery();
                    if(rs!=null&&rs.next()) {
                        rtn = rs.getInt("c");   //只要一个字段的值, 就是count(1)
                    }
                }
                catch(Exception ex) {
                    throw ex;
                }
                finally {
                    try {
                        pst.close();                      //如果出现异常也要确保资源能够正常释放
                    }
                    catch(Exception ex1) {
                        throw ex1;
                    }
                    conn.close();
                }
            }
            return rtn;
        }

      数据库的语句和代码的原理是这么来的:

    String sql = "select * from (select t.*, rownum as rnum from member t where ROWNUM <= ?) where rnum > ?";

    p = con.prepareStatement(sql);
    p.setInt(1, maxrows);
    p.setInt(2, maxrows-rows);
      占位符的原理, 比如说, 最大行数maxrows是page页面数乘以每页显示的行数rows, 这个很好理解, 当显示第一页的时候, 他的最大行数就是1乘以5, 5减去每行显示的行数5等于0, 这时候加条件判断where rnum >这个数字, 意思就是取第(大于0且小于等于5)的数据, 显示的就是前五行的内容, 以此类推显示第二页的时候最大行数就是2乘以5, 最大行数变成了10, 减去每页显示的行数5等于5, 再加判断条件就是显示6到10行的内容, 第三页的时候就是3乘以5等于15减去每页的行数5等于10, 就是数据库里面第三个五行显示的内容, 就是第三页的内容

    这里就是每页取显示5行内容, 那就只从数据库里面的取出5行数据, 从而做到分也显示

  • 相关阅读:
    iOS 基础复习
    iOS项目立项
    Cocos2d-JS项目之四:UI界面的优化
    Cocos2d-JS项目之三:使用合图
    Cocos2d-JS项目之二:studio基础控件的使用
    Cocos2d-JS项目之一:环境(IDE 运行js-tests、IDE 和 studio 统一工程)
    字节对齐导致的iOS EXC_ARM_DA_ALIGN崩溃
    cocos2dx 2.x 骨骼动画优化
    Cocos2dx 把 glview 渲染到 Qt 控件上(Mac 环境)
    [leetcode 周赛 160] 1240 铺瓷砖
  • 原文地址:https://www.cnblogs.com/wgbs25673578/p/5090124.html
Copyright © 2020-2023  润新知