精华内容
下载资源
问答
  • 循环分页查询数据库
    2022-07-22 13:35:39
     public void pageQuery() {
        List<Map<String, Object>> bjList = new ArrayList<>();
        //起始页
        Integer currPage = 1;
        //每页展示条数
        Integer pageSize = 10000;
        for (int i = 1; i < 1000000; i++) {
            currPage = (i - 1) * pageSize;
            //自己的查询sql
            bjList = fenceDataMapper.selectBjAll(currPage, pageSize);
            if (CollectionUtil.isEmpty(bjList)) {
                break;
            } else {
                beijingWLSave(bjList);
            }
        }
    
    }
    更多相关内容
  • JAVA中分页查询数据库

    2019-11-17 16:56:31
    分页查询 执行一条SQL语句 注意我们需要利用MVC分层设计思想 Service层负责计算的page dao层负责根据计算后的rowIndex执行查询的结果 不止一条记录 mysql> select * from emp ; +-------+--------+-----------+--...

    分页查询
    执行一条SQL语句
    注意我们需要利用MVC分层设计思想 Service层负责计算的page
    dao层负责根据计算后的rowIndex执行查询的结果 不止一条记录

    mysql> select * from emp ;
    +-------+--------+-----------+------+------------+------+------+--------+
    | empon | ename  | job       | mgr  | hiredate   | sal  | comm | deptno |
    +-------+--------+-----------+------+------------+------+------+--------+
    |  7369 | SMITH  | CLERK     | 7902 | 1980-12-17 |  800 | NULL |     20 |
    |  7499 | ALLEN  | SALESMAN  | 7698 | 1981-02-20 | 1600 |  300 |     30 |
    |  7521 | WARD   | SALESMAN  | 7698 | 1981-02-22 | 1250 |  500 |     30 |
    |  7566 | JONES  | MANAGER   | 7839 | 1981-04-02 | 2975 | NULL |     20 |
    |  7654 | MARTIN | SALESMAN  | 7698 | 1981-09-28 | 1250 | 1400 |     30 |
    |  7698 | BLAKE  | MANAGER   | 7839 | 1981-05-01 | 2850 | NULL |     30 |
    |  7782 | CLARK  | MANAGER   | 7839 | 1981-06-09 | 2450 | NULL |     10 |
    |  7788 | SCOTT  | ANALYST   | 7566 | 1987-04-19 | 3000 | NULL |     20 |
    |  7839 | KING   | PRESIDENT | NULL | 1981-11-17 | 5000 | NULL |     10 |
    |  7844 | TURNER | SALESMAN  | 7698 | 1981-09-08 | 1500 |    0 |     30 |
    |  7876 | ADAMS  | CLERK     | 7788 | 1987-05-23 | 1100 | NULL |     20 |
    |  7900 | JAMES  | CLERK     | 7698 | 1981-12-03 |  950 | NULL |     30 |
    |  7902 | FORD   | ANALYST   | 7566 | 1981-12-03 | 3000 | NULL |     20 |
    |  7934 | MILLER | CLERK     | 7782 | 1982-01-23 | 1300 | NULL |     10 |
    +-------+--------+-----------+------+------------+------+------+--------+
    14 rows in set (0.02 sec)
    

    在java中使用limit实现分页查询

    public class Main {
        public static void main(String[] args){
            ServiceEmp service = new ServiceEmp() ;
            Scanner input = new Scanner(System.in);
            System.out.println("输入页码");
            int page = input.nextInt() ;
            ArrayList<Emp> list = service.limit(page);
            for (Emp emp : list){
                System.out.println(emp);
            }
        }
    }
    ///=========================================================================
    
    public class DaoEmp {
        //数据持久层
        private String className = "com.mysql.jdbc.Driver" ; //"com.mysql.jdbc.Driver"
        private String url = "jdbc:mysql://localhost:3306/test?characterEncoding=utf-8&verifyServerCertificate=false&useSSL=true" ;
        private String user = "root" ;
        private String password = "root" ;
    
        public ArrayList<Emp> limit(int rowIndex){
            Connection con = null ;
            PreparedStatement pstat = null ;
            ResultSet rs = null ;
            ArrayList<Emp> list = new ArrayList<Emp>();
            try {
                Class.forName(className);
                con = DriverManager.getConnection(url,user,password);
                String sql = "SELECT * FROM EMP LIMIT ?,5";
                pstat = con.prepareStatement(sql);
                pstat.setInt(1,rowIndex);
                rs = pstat.executeQuery();
                while(rs.next()){
                    Emp emp = new Emp();
                    emp.setEmpno(rs.getInt("empon"));
                    emp.setEname(rs.getString("ename"));
                    emp.setJob(rs.getString("job"));
                    emp.setMgr(rs.getInt("mgr"));
                    emp.setHireDate(rs.getDate("hiredate"));
                    emp.setSal(rs.getInt("sal"));
                    emp.setComm(rs.getInt("comm"));
                    emp.setDeptno(rs.getInt("deptno"));
                    list.add(emp);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }finally{
                try {
                    if (rs!=null){
                        rs.close();
                    }
                } catch (SQLException e) {
                    e.printStackTrace();
                }
                try {
                    if (pstat!=null){
                        pstat.close();
                    }
                } catch (SQLException e) {
                    e.printStackTrace();
                }
                try {
                    if (con!=null){
                        con.close();
                    }
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            return list ;
        }
    }
    
    
    //================================================================
    
    public class ServiceEmp {
        private DaoEmp dao = new DaoEmp() ;
        //数据处理层
        public ArrayList<Emp> limit(int page){
            return dao.limit((page-1)*5);//每次查询的行数是5
        }
    }
    
    ///========================
    //domian实体类用来存储数据
    
    public class Emp {
    
        private Integer empno ;
        private String ename ;
        private String job ;
        private Integer mgr ;
        private Date hireDate ;
        private Integer sal ;
        private Integer comm ;
        private Integer deptno ;
    
        public Emp(){};
        public Emp(Integer empno, String ename, String job, Integer mgr, Date hireDate, Integer sal, Integer comm, Integer deptno) {
            this.empno = empno;
            this.ename = ename;
            this.job = job;
            this.mgr = mgr;
            this.hireDate = hireDate;
            this.sal = sal;
            this.comm = comm;
            this.deptno = deptno;
        }
    
        @Override
        public String toString() {
            StringBuilder builder = new StringBuilder("{");
            builder.append(this.empno);
            builder.append(",");
            builder.append(this.ename);
            builder.append(",");
            builder.append(this.job);
            builder.append(",");
            builder.append(this.mgr);
            builder.append(",");
            builder.append(this.hireDate);
            builder.append(",");
            builder.append(this.sal);
            builder.append(",");
            builder.append(this.comm);
            builder.append(",");
            builder.append(this.deptno);
            builder.append("}");
            return builder.toString();
        }
        public Integer getEmpno() {
            return empno;
        }
        public void setEmpno(Integer empno) {
            this.empno = empno;
        }
        public String getEname() {
            return ename;
        }
        public void setEname(String ename) {
            this.ename = ename;
        }
        public String getJob() {
            return job;
        }
        public void setJob(String job) {
            this.job = job;
        }
        public Integer getMgr() {
            return mgr;
        }
        public void setMgr(Integer mgr) {
            this.mgr = mgr;
        }
        public Date getHireDate() {
            return hireDate;
        }
        public void setHireDate(Date hireDate) {
            this.hireDate = hireDate;
        }
        public Integer getSal() {
            return sal;
        }
        public void setSal(Integer sal) {
            this.sal = sal;
        }
        public Integer getComm() {
            return comm;
        }
        public void setComm(Integer comm) {
            this.comm = comm;
        }
        public Integer getDeptno() {
            return deptno;
        }
        public void setDeptno(Integer deptno) {
            this.deptno = deptno;
        }
    }
    
    
    展开全文
  • MySQL查询大量数据分页在上一篇文章:MySQL查询大量数据所面临的一些问题,说明了在MySQL中查询大量数据所面临的问题。遇到查询大型数据,应该怎么解决呢?和容易想到就是分页查询,这是一个正确的方法,应该如何...

    MySQL查询大量数据分页

    在上一篇文章:MySQL查询大量数据所面临的一些问题,说明了在MySQL中查询大量数据所面临的问题。

    遇到查询大型数据,应该怎么解决呢?

    和容易想到就是分页查询,这是一个正确的方法,应该如何分页?

    最主要就是使用MySQL中的LIMIT 和 OFFSET关键字,下面是示例:SELECT * FROM Orders LIMIT 30;

    上面查询了:“订单”的表中选择1-30(含)之间的所有记录

    如果我们想选择记录16-25(含)怎么办?

    Mysql还提供了一种解决方法:使用OFFSET。

    下面的SQL查询显示“仅返回10条记录,从记录16开始(偏移15)”:SELECT * FROM Orders LIMIT 10 OFFSET 15;

    利用这个例子,我们就很容易给大型数据分页。

    具体查询示例如下:for item in range(108095):

    # 查询2019年全年数据

    sql = "SELECT * FROM table_name JOIN (SELECT id FROM table_name WHERE Time BETWEEN '2019-01-01 00:00:00' AND '2020-01-01 00:00:00' LIMIT 100 OFFSET 0) AS t1 ON (t1.id=table_name.id);"

    # 执行SQL语句

    try:

    cur.execute(sql)

    # 获取所有记录列表

    results = cur.rowcount

    注意这里偏移量一直是0,是由于后面删除了查询到的数据,所以一直是从0开始的,这里循环了108095次,也就是数据量/100取整+1得到的数据。

    这样通过上面的原理给上面的数据实现了分页,同时使用了覆盖查询,来优化查询速度。

    同时优化MySQL查询速度,可以参考这篇文章:MySQL查询优化

    参考资料:

    黄兵个人博客原创

    展开全文
  • mysql的分页查询(for循环

    千次阅读 2018-03-03 10:01:53
    发送短信提醒,在查询中,因为生产上的数据数十万条,数据量大,如果直接一下子查出来,会对数据库造成很大的压力,用到分页查询,按照正常逻辑,查询表中总数量,然后根据当前页以及每页数量,循环数据库进行查询...

    这两天写了一个定时任务,关于查询表中快过期的卡,发送短信提醒,在查询中,因为生产上的数据数十万条,数据量大,如果直接一下子查出来,会对数据库造成很大的压力,用到分页查询,按照正常逻辑,查询表中总数量,然后根据当前页以及每页数量,循环对数据库进行查询;

    [java]  view plain  copy
    1. //分页查询,每次查询1000条数据  
    2. int pageSize = 1000;//每页数量  
    3. int page = 1;//定义总页数  
    4. int offset;//当前页起始数  
    5. int rowCount;//当前页结束数  
    6. List<GiftCard> list = null;  
    7. List<Integer> userIdList = new ArrayList<Integer>();  
    8. //得到总页数  
    9. if(giftCardCount > 0){             
    10.     if(giftCardCount%pageSize==0){  
    11.         page=(int) (giftCardCount/pageSize);  
    12.     }else{  
    13.         page=(int) (giftCardCount/pageSize+1);  
    14.     }  
    15. }  
    16. //查询出还有三天且绑定了用户的优选卡信息  
    17. for (int i = 1; i < page + 1; i++) {           
    18.     if(page == 1){//即将过期账号查询只有一页时  
    19.         offset = 0;  
    20.         rowCount = (int) giftCardCount;  
    21.         list = giftcardDAO.getGiftCardThreeDaysDue(rowCount,offset,currentTime,fourDaysTime);  
    22.         if(null != list && list.size() > 0) {  
    23.             for (GiftCard giftCard : list) {  
    24.                 Integer userId = giftCard.getUserId();  
    25.                 userIdList.add(userId);  
    26.             }             
    27.         }  
    28.     }else{//即将过期优选卡查询多页时分页处理  
    29.         if(i == 1){                   
    30.             offset = 0;  
    31.         }else{  
    32.             offset = (i-1)*pageSize;                      
    33.         }  
    34.         if(page == i){                    
    35.             //rowCount = (int) giftCardCount;  
    36.             rowCount = (int) giftCardCount - (i-1) * pageSize;  
    37.         }else {  
    38.             //rowCount = i*pageSize -1;  
    39.             rowCount = pageSize;  
    40.         }  
    41.         list = giftcardDAO.getGiftCardThreeDaysDue(rowCount,offset,currentTime,fourDaysTime);  
    42.         if(null != list && list.size() > 0) {  
    43.             for (GiftCard giftCard : list) {  
    44.                 Integer userId = giftCard.getUserId();  
    45.                 userIdList.add(userId);  
    46.             }             
    47.         }  
    48.     }  
    49. }  

    上面的代码,是否能进一步优化呢?

    如果采用for循环的break跳出会不会逻辑更加简单些?

    每一次循环查出1000条,当某一次查出的数据的数量不够1000条时,表示再往下循环已然没有数据,这个时候跳出,循环结束,即将过期卡的信息也被完全查出,相比上面的业务逻辑,简单许多,在生产商可以节省不少时间,修改代码如下:

    [java]  view plain  copy
    1. //分页查询,每次查询1000条数据  
    2. int pageSize = 1000;//每页数量        
    3. int offset;//当前页起始数   
    4. List<GiftCard> list = null;  
    5. List<Integer> userIdList = new ArrayList<Integer>();  
    6.   
    7. for(int i = 0;i>=0;i++){  
    8.     offset = i*pageSize;  
    9.     list = giftcardDAO.getGiftCardThreeDaysDue(pageSize,offset,currentTime,fourDaysTime);  
    10.     if(null != list && list.size() > 0) {  
    11.         for (GiftCard giftCard : list) {  
    12.             Integer userId = giftCard.getUserId();  
    13.             userIdList.add(userId);  
    14.         }             
    15.     }  
    16.     if(null != list && list.size() > 0 && list.size() < pageSize){  
    17.         break;  
    18.     }  
    19. }  
    这里利用了for循环的break跳出,优化代码简化逻辑,而且减少了对数据库的访问次数。

    补充:这里也顺便介绍下java跳出for循环的break和continue语句;

    “break”语句用来结束循环,即不再执行后边的所有循环。

    示例:计算1+2+3+4......+100的结果。

    [java]  view plain  copy
    1. public class example1{  
    2.     public static void main(String[] args){  
    3.         int result=0;  
    4.         for(int i=1;i<=100;i++){  
    5.             if(i>50break;  
    6.             result+=i;  
    7.         }  
    8.         System.out.println(result);  
    9.     }  
    10. }  
    输出结果:
    1275

    分析:程序只计算了1+2+3+4+......+50的结果,后边的循环全部没有执行,即当i=51的时候,循环就结束了。

    另外,“break”语句可以与switch开关语句一起使用, 当break用于开关语句switch中时,可使程序跳出switch而执行switch以后的语句;如果没有break语句,则会从满足条件的地方(即与switch(表达式)括号中表达式匹配的case)开始执行,直到switch结构结束。

    “continue”语句用来结束当前循环,并进入下一次循环,即仅仅这一次循环结束了,不是所有循环结束了,后边的循环依旧进行。

    示例:计算1+2+3+4......+100的结果。

    [java]  view plain  copy
    1. public class example1{  
    2.     public static void main(String[] args){  
    3.         int result=0;  
    4.         for(int i=1;i<=100;i++){  
    5.             if(i>50&&i<=60continue;  
    6.             result+=i;  
    7.         }  
    8.         System.out.println(result);  
    9.     }  
    10. }  
    输出结果:
    4495

    分析:程序计算了1+2+3+......+48+49+50+61+62+63+......+100的结果,仅仅没有对i=51,52......60进行循环。
    展开全文
  • 数据库学习之分页查询

    千次阅读 2022-04-07 14:46:40
    不指定初始位置- 配合offset使用2.sql server语法- 三重循环- 利用max(主键)- 利用row_number关键字(2005版本以上才有)- offset /fetch next(2012版本及以上才有)3.orcale语法- 采用伪列 rownum- 分页查询一-...
  • Access数据库 实现分页查询

    千次阅读 2019-07-28 14:20:16
    Access数据库 实现分页查询目录说明项目的结构SQL语句Servlet:page.java显示页面query.jsp访问页面hello.jsp总结 目录 说明 项目环境:Eclipse+Tomcat服务器+Access数据库+servlet+jdbc驱动 项目的结构 图片: SQL...
  • 避免查询经常访问数据库As the amount of data managed by an organization grows, the difficulty of managing and querying that data grows as well: more databases, more query languages, more gotchas to ...
  • 数据库分页的几种实现

    千次阅读 2021-07-19 23:33:53
    数据库分页的几种实现 数据库分页总体上有两种方式: limit/offset 方式 游标方式 滚动方式 SQL -- 通过 LIMIT/OFFSET -- MySQL SELECT * FROM <table_name> LIMIT <offset>,<page_size> ...
  • MySQL数据库实现的分页实例 先导入SQL语句 Web
  • Java线程池多线程查询数据库提高查询效率需求问题思路代码解析 需求 公司数据统计报表查询,几张大表关联查询,包含跨库查询,数据联查,数据过滤,数据统计。 问题 主表数据1 主表数据2 … 统计数据1 统计...
  • 在开发过程中,经常做的一件事,也是最基本的事,就是从数据库查询数据,然后在客户端显示出来。当数据少时,可以在一个页面内显示完成。然而,如果查询记录是几百条、上千条呢?直接一个页面显示完全的话,表格得...
  • 例如:循环请求 和反复请求数据库 我都不要,这么写项目你们的CTO 不会打你么? 问题描述 提示:这里描述项目中遇到的问题: 例如: 查询一个班级的学生 英文成绩 @举个简单的例子 public function run() { $...
  • 分页的几种写法: 第一种、从DataSet里筛选分页行的数据 第二种、直接SQL语句ROW_NUMGER() OVER(ORDER BY T.ID DESC) 第三种、最简单写法 (select top @pageSize*(@pageIndex-1)
  • 易语言读MySQL数据库出现中文乱码,求高手赐教?看下mysql数据的编码, 再用易语言,使用同样的编码去链接mysql数据库易语言如何读取数据库中固定行列的数据?有几个命令:打开(),用于打开一个数据库,便于修改。读...
  • Java实现分页查询

    千次阅读 2021-03-13 06:09:28
    从0开始的N:每次查询多少条。每次查10条:查第一页的:SELECT * FROM table LIMIT 0,10;查第二页的:SELECT * FROM table LIMIT 10,10;为了在页面更好的展示,并且为了减少内存的占用率,不是一次性将数据从数据库...
  • 本文实例为大家分享了微信小程序云开发实现数据添加、查询分页,供大家参考,具体内容如下 实现的效果 实现要点 WXML 不同类别数据的显示 通过 if-elif-else 实现,在wxml文件中通过 <block></block>渲染,因为它...
  • java实现分页查询

    千次阅读 2021-02-12 09:22:06
    1.基本思路我现阶段的分页查询的实现是基于sql语句的。select * from user where id limit a, b构造出相应的a和b就可以查询出想要的数据,在显示在页面上。重点是要构造出当前的页数,就要封装一个javaBean,存储...
  • 分页查询数据

    2021-11-28 16:40:12
    分页查询: 在开发过程中,经常需要做的一个事,就是把数据显示给用户看,如果数据相对少的话,直接把所有数据都全部查询出来即可,但是,假如数据很多,那么加载数据的时间就会很长,如果数据量过于庞大的话,不是...
  • 业务:定时从MySQL数据库中读取数据保存到ES中,但MySQL数据量很大,单sql查询非常耗时,同时用List接收处理也有问题。刚开始想到直接分页处理,但发现处理效率很慢。最终想到使用多线程+分页形式处理,效率真的提高...
  • 数据库 分页 sqlserver 四种方法
  • 结合mysql数据库查询,实现分页效果 @user.route("/user_list",methods=['POST','GET']) def user_list(): p = g.args.get("p", '') #页数 show_shouye_status = 0 #显示首页状态 if p =='': p=1 else: p=int...
  • 数据库分页Java实现

    2021-02-06 21:15:40
    MySQL分页主要是MySQL数据库内置LIMIT函数注意添加mysql的JAR包mysql-connector-java-5.1.13-bin.jarselect*fromtableLIMIT5,10;//检索记录行6-15在中小数据量的情况下,这样的SQL足够用了,唯一需要注意的问题就是...
  • java使用多线程查询大批量数据

    千次阅读 2021-03-08 08:59:40
    前言在某些时候,一旦单表数据量过大,查询数据的时候就会变得异常卡顿,虽然在大多数情况下并不需要查询所有的数据,而是通过分页或缓存的形式去减少或者避免这个问题,但是仍然存在需要这样的场景,比如需要导出一...
  • kettle写的循环分页迁移数据的例子,迁移了36w数据,速度飞快,平均cpu使用只有19%。数据库表是运营商号段数据,网上有,比较大就不放上来了。
  • java 分页显示从数据库查询的数据

    千次阅读 2018-08-06 16:50:35
    代码如下: Page:是前台传的第几页参数 rows:是前台传的一页几条...count :是从数据库查询的数据总条数  if (Page.getCurrentPage() == null){  Page.setCurrentPage(1);  } else {  Page.setCurrentPage(...
  • 多线程查询数据库,可以显著提升多批次查询速度。 List<Map> list=new ArrayList<>(); ExecutorService pool = Executors.newFixedThreadPool(48); CountDownLatch latch = new CountDownLatch...
  • //循环查询插入,默认第一次分页起始索引为0,每次循环结束后,起始结束索引都加10000 for(int startIndex = 0; startIndex ; startIndex += 10000){ params.clear(); params.add(endIndex); params.add(startIndex...
  • Mysql数据库常用查询方法及演示 where条件查询的介绍 使用where条件查询可以对表中的数据进行筛选,条件成立的记录会出现在结果集中。 where语句支持的运算符: 比较运算符 逻辑运算符 模糊查询 范围查询 空判断 1....
  • java多线程查询数据库(分段查询

    千次阅读 2022-03-08 16:20:08
    根据数据集合的大小,所开线程的数量,计算每个线程需要执行查询的数据量。 计算出SQL语句中每个查询的起始位置和结束位置下标。 每个线程,查询各自的范围内的数据。 public void queryByThread() { // 数据...
  • 一般想到的计算是,通过求余 求模,没有整除,循环次数就要 +1 int p = totalCount / pageSize; if (totalCount % pageSize != 0) p++; return p; int p = totalCount / pageSize; if (to...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 54,448
精华内容 21,779
热门标签
关键字:

循环分页查询数据库