java web 分页查询

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java web 分页查询相关的知识,希望对你有一定的参考价值。

//查询出需要显示的记录
rs = sm.executeQuery("select top " + pageSize + " * from users where userId not in (select top "
+ pageSize * (pageNow - 1) + " userId from users) ");

求大神帮我看看那错了
报错提示:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '3 * from users where userId not in (select top 0 userId from users)' at line 1
我知道那错了 我的是mysql数据库 这个是sql server语句 求个大哥帮忙改成mysql语句

你使用的是什么数据库?top子句是sql server的分页查询方法,但是如果你使用的是mysql数据库,那么它的分页方法是使用limit,比如select * from users limit 0,10,改sql查询的是第一页,每页十条数据追问

我用的mysql数据库 就是不知道怎么改

追答

楼下不都是给你写好了,mysql分页查询的语法就是limit,比如你有一张users表,100条数据,你想做的分页查询是每页10条数据,那么limit后面的第二个参数就是10,比如limit 2,10表示的就是第三页(第一页为limit 0,10),每页十条数据,如果你想每页8条的话就是limit 2,8嘛,就是这么简单,只要把limit 放在sql语句的最后,然后就会按你给定的分页条件获得相应页的结果嘛

追问

参考技术A 首先 mysql 不支持top语法,可以换成 limt (起始量,偏移量)的方式
将查询换成如下试试
rs = sm.executeQuery("select * from users where userId not in (select userId from users limit 0, "+pageSize * (pageNow - 1)+") limit 0,"+pageSize+);
追问

大哥还是不行 这是我的源码 你看看

参考技术B sqlserver吗追问

jsp

[原创]java WEB学习笔记92:Hibernate学习之路-- -QBC 检索和本地 SQL 检索:基本的QBC 查询,带 AND 和 OR 的QBC,统计查询,排序,分页

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用

内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系。

本人互联网技术爱好者,互联网技术发烧友

微博:伊直都在0221

QQ:951226918

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

1.QBC 检索和本地 SQL 检索

  1)QBC 查询就是通过使用 Hibernate 提供的 Query By Criteria API 来查询对象,这种 API 封装了 SQL 语句的动态拼装,对查询提供了更加面向对象的功能接口

  2)本地SQL查询来完善HQL不能涵盖所有的查询特性:添加操作

 

2.QBC 的具体实践和相关API

  1)基本的QBC 查询

 1 @Test
 2     public void testQBC(){
 3         //1.创建一个Criteria 对象
 4         Criteria criteria = session.createCriteria(Employee.class);
 5         
 6         //2.添加查询条件: 在QBC 中查询条件使用 Criteria 表示
 7         //Criteria 可以通过 Restrictions 的静态方法得到
 8         criteria.add(Restrictions.eq("email", "SKUMAR"));
 9         criteria.add(Restrictions.gt("salary", 5000F));
10         
11         //3.执行查询
12         Employee employee = (Employee) criteria.uniqueResult();
13         System.out.println(employee);
14     }
15     

 

 

  2)带 AND 和 OR 的QBC: Restrictions 封装了一个常用的逻辑运算,算术等

技术分享

  

 1 @Test
 2     public void testQBC2(){
 3         Criteria criteria = session.createCriteria(Employee.class);
 4         
 5         //1.AND :使用Conjunction 表示
 6         //conjuntion 本身就是一个criteria 对象,且其中还可以添加Criteria 对象
 7         Conjunction conjunction = Restrictions.conjunction();
 8         conjunction.add(Restrictions.like("name", "a",MatchMode.ANYWHERE));
 9         Department dept = new Department();
10         dept.setId(80);
11         conjunction.add(Restrictions.eq("dept", dept));
12         System.out.println(conjunction); //(name like %a% and dept=Department [id=80])
13         
14         //2.OR
15         Disjunction disjunction = Restrictions.disjunction();
16         disjunction.add(Restrictions.ge("salary", 6000F));
17         disjunction.add(Restrictions.isNotNull("email") );
18         
19         System.out.println(disjunction);//(salary>=6000.0 or email is not null)
20         
21         //添加至 criteria
22         criteria.add(disjunction);
23         criteria.add(conjunction);
24         
25         //执行
26         criteria.list();
27         
28     }

 

 1 Hibernate: 
 2     select
 3         this_.ID as ID1_1_1_,
 4         this_.NAME as NAME2_1_1_,
 5         this_.SALARY as SALARY3_1_1_,
 6         this_.EMAIL as EMAIL4_1_1_,
 7         this_.DEPT_ID as DEPT_ID5_1_1_,
 8         department2_.ID as ID1_0_0_,
 9         department2_.NAME as NAME2_0_0_ 
10     from
11         GG_EMPLOYEE this_ 
12     left outer join
13         GG_DEPARTMENT department2_ 
14             on this_.DEPT_ID=department2_.ID 
15     where
16         (
17             this_.SALARY>=? 
18             or this_.EMAIL is not null
19         ) 
20         and (
21             this_.NAME like ? 
22             and this_.DEPT_ID=?
23         )

 

 

  3)统计查询:Projections 封装了一些 sql的聚合函数

技术分享


  

1 @Test
2     public void testQBC3(){
3         Criteria criteria = session.createCriteria(Employee.class);
4         
5         //统计查询:使用Projection 来表示 可以由Projections 静态方法得到
6         criteria.setProjection(Projections.max("salary"));
7         System.out.println(criteria.uniqueResult());
8         
9     }

 

1 Hibernate: 
2     select
3         max(this_.SALARY) as y0_ 
4     from
5         GG_EMPLOYEE this_
6 24000.0

 

 

  4)排序,分页

 1     @Test
 2     public void testQBC4(){
 3         Criteria criteria = session.createCriteria(Employee.class);
 4         //1.添加排序
 5         criteria.addOrder(Order.asc("salary"));
 6         criteria.addOrder(Order.desc("email"));
 7         
 8         //2.添翻页方法
 9         int pageSize = 5;
10         int pageNo = 3;
11         criteria.setFirstResult((pageNo -1 ) * pageSize)
12                 .setMaxResults(pageSize)
13                 .list();
14 
15         
16     }
17     

 

 1 Hibernate: 
 2     select
 3         * 
 4     from
 5         ( select
 6             row_.*,
 7             rownum rownum_ 
 8         from
 9             ( select
10                 this_.ID as ID1_1_1_,
11                 this_.NAME as NAME2_1_1_,
12                 this_.SALARY as SALARY3_1_1_,
13                 this_.EMAIL as EMAIL4_1_1_,
14                 this_.DEPT_ID as DEPT_ID5_1_1_,
15                 department2_.ID as ID1_0_0_,
16                 department2_.NAME as NAME2_0_0_ 
17             from
18                 GG_EMPLOYEE this_ 
19             left outer join
20                 GG_DEPARTMENT department2_ 
21                     on this_.DEPT_ID=department2_.ID 
22             order by
23                 this_.SALARY asc,
24                 this_.EMAIL desc ) row_ 
25         where
26             rownum <= ?
27         ) 
28     where
29         rownum_ > ?

 

 

 

3.由于QBC 不支持插入操作,所以hibernate 支持使用原生的 sql 进行更新操作

 1 @Test
 2     public void testNaviteSQL(){
 3         String sql = "INSERT INTO gg_department VALUES(?,?)";
 4         Query query = session.createSQLQuery(sql);
 5         
 6         query.setInteger(0, 300)
 7             .setString(1, "JASON")
 8             .executeUpdate();
 9         
10     }
1 Hibernate: 
2     INSERT 
3     INTO
4         gg_department
5         
6     VALUES
7         (?,?)

 

 

 4.QBC 支持删除操作

1 @Test
2     public void testUpdate(){
3         String hql = "DELETE FROM Department d WHERE d.id = :id";
4         session.createQuery(hql).setInteger("id", 280).executeUpdate();
5     }

 

1 Hibernate: 
2     delete 
3     from
4         GG_DEPARTMENT 
5     where
6         ID=?

 

以上是关于java web 分页查询的主要内容,如果未能解决你的问题,请参考以下文章

java web 分页技术

java 怎么分页?

Web 条件查询分页查

[原创]java WEB学习笔记90:Hibernate学习之路-- -HQL检索方式,分页查询,命名查询语句,投影查询,报表查询

Java Web——分页技术

mongodb 多表分页怎么查询