zoukankan      html  css  js  c++  java
  • Android初级教程对大量数据的做分页处理理论知识

    有时候要加载的数据上千条时,页面加载数据就会很慢(数据加载也属于耗时操作)。因此就要考虑分页甚至分批显示。先介绍一些分页的理论知识。对于具体用在哪里,会在后续博客中更新。
    分页信息

    1,一共多少条数据

       select count(*) from blacktb;
       性能低下
             原因: sql解析器先查询数据字典,把*转成所有的列名和列的类型
    
                   然后把每行数据提取出来
                   最后统计多少行数据
    
       select count(常量) from blacktb;
       高性能的查询
                 不需要每行的记录,只需要行数
    

    2,指定每页显示多少条

     需求制定每页行数 如: 20
    

    3,计算出共多少页

      int pages = (int)Math.ceil(201 * 1.0 / 20); // 10.05
    

    4,取每页的信息 3页的数据

      select * from blacktb limit 取多少条 offset 从哪条数据;
      select * from blacktb limit 行的起始位置 , 多少条数据;
    
      如:取第3页  PageNumber每页显示多少条数据 
      select * from blacktb limit (3 - 1)*PageNumber,PageNumber

    一般数据在数据库中取到显示的。根据上述理论知识,下面给一些查询数据库的一些伪代码。在项目中使用分页的时候,直接套用即可:

    /**
    	 * @return 总数据个数
    	 */
    	public int getTotalRows() {
    		SQLiteDatabase database = blackDB.getReadableDatabase();
    		Cursor cursor = database.rawQuery("select count(1) from "
    				+ BlackTable.BLACKTABLE, null);
    		cursor.moveToNext();
    		// 总行数
    		int totalRows = cursor.getInt(0);
    
    		cursor.close();// 关闭游标
    		return totalRows;
    	}
    	
    	
    	/**
    	 * @param currentPage
    	 *            当前页的页码
    	 * @param perPage
    	 *            每页显示多少条数据
    	 * @return 当前页的数据
    	 */
    	public List<BlackBean> getPageDatas(int currentPage, int perPage) {
    		List<BlackBean> datas = new ArrayList<BlackBean>();
    		SQLiteDatabase database = blackDB.getReadableDatabase();
    		// 获取blacktb的所有数据游标 (2 + 3) + ""
    		Cursor cursor = database.rawQuery("select " + BlackTable.PHONE + ","
    				+ BlackTable.MODE + " from " + BlackTable.BLACKTABLE
    				+ " limit ?,? ", new String[] {((currentPage - 1) * perPage) + "",perPage + ""});
    
    		while (cursor.moveToNext()) {
    			// 有数据,数据封装
    			BlackBean bean = new BlackBean();
    
    			// 封装黑名单号码
    			bean.setPhone(cursor.getString(0));
    
    			// 封装拦截模式
    			bean.setMode(cursor.getInt(1));
    
    			// 添加数据到集合中
    			datas.add(bean);
    		}
    
    		cursor.close();// 关闭游标
    		database.close();// 关闭数据库
    
    		return datas;
    
    	}
    
    	/**
    	 * @param perPage
    	 *            指定每页显示多少条数据
    	 * @return 总页数
    	 */
    	public int getTotalPages(int perPage) {
    		int totalRows = getTotalRows();
    		// 计算出多少页,采用ceil函数,返回不小于该数的最小整数 如 :6.1 返回7.0
    		int totalPages = (int) Math.ceil(totalRows * 1.0 / perPage);
    		return totalPages;
    
    	}






  • 相关阅读:
    [SCOI 2003] 字符串折叠
    [POJ 3252] Round Numbers
    [ZJOI 2010] 数字计数
    [POJ 2282] The Counting Problem
    [POJ 1191] 棋盘分割
    [POJ 3345] Bribing FIPA
    [POJ 2785] 4 Values whose Sum is 0
    [NOIP 2017] 列队
    [NOIP 2017] 宝藏
    基于Qt Gui的Led控制显示程序
  • 原文地址:https://www.cnblogs.com/wanghang/p/6299637.html
Copyright © 2011-2022 走看看