分页查询  limit [start],[rows]

思路:

pram start 从哪一行开始 关键是从哪一行开始,需要根据查询的页数来进行换算出查询具体页数是从哪一行开始

start = (pages-1)*rows; 
pages : 具体要查询那一页

rows :   每页查询多少行

pram rows 查询多少行

总页数需用额外的方法使用SQL语句中的count关键字来计算,并对用户输入的页数进行逻辑判断。

当用户输入页数<=0;从第一页开始 当用户输入页数>=最大页数是 从最大的页数开始 

DEMO1  分页查询的主方法

public List<User> selectByPage(int  startpage, int rows) {
sql = "select * from tb_user limit ?,?";
conn = DBUtil.getconn();
List<User> list = new ArrayList<>();
User user = null;
try {
PreparedStatement ps = conn.prepareStatement(sql);
int start = (startpage-1)*rows;
ps.setInt(1, start);
ps.setInt(2, rows);
ResultSet rs = ps.executeQuery();
while(rs.next()) {
user = new User(rs.getString("pass"), rs.getInt("uage"), rs.getString("uname"),
rs.getString("birthday"), rs.getBigDecimal("sal"), null);
list.add(user);
} } catch (SQLException e) {
e.printStackTrace();
}finally {
DBUtil.closeResources(conn, ps, null);
}
return list;
}

  DEMO2  计算可查询最大页数的方法

/**
*
* @param rows 为每次查询时需显示的行数
* @return countpages返回的是可查的最大页数
*/
@Override
public int countmaxpages(int rows) {
// 计算查询表的最大页数
int countpages = 0;
sql = "select count(*) from tb_user";
conn = DBUtil.getconn();
try {
ps = conn.prepareStatement(sql);
ResultSet rs = ps.executeQuery();//结果集存储的是查询后的表的内容,
// 如果只查询一个字段,则查询后的返回的结果集只有一个字段
if(rs.next()) {
int lines = rs.getInt(1);
countpages = (lines%rows==0)?(lines/rows):(lines/rows+1);
}
} catch (SQLException e) {
e.printStackTrace();
}
return countpages;
}

  DEMO3  代码优化,需要对用户输入的页数进行合法性判断。

	@Override
public Map<String, Object> selectByPage(int startpage, int rows) {
// 对用户输入的页数合法性进行判断
// 如果用户输入的页数<=0,或用户的输入查询的行数>总行数。则设置默认从第一页开始显示
if(startpage<=0||rows>userDao.countmaxpages(rows)) {
startpage = 1;
}
// 如果用户的输入查询的行数>最大页数(根据用户输入的查询行数和总可查询行数确定)。则设置默认从最后一页开始显示
if(startpage>userDao.countmaxpages(rows)) {
startpage = userDao.countmaxpages(rows);
}
List<User> list = new ArrayList<>();
list = userDao.selectByPage(startpage, rows);
if(list.size()==0) {
map.put("code",600);
map.put("msg","分页查询失败");
return map;
}else {
map.put("code",200);
map.put("msg","分页查询成功");
list.forEach(user1->{
System.out.println(user1);
});
return map;
}
}

  

Java数据库学习之分页查询的更多相关文章

  1. Java数据库学习之模糊查询(like )

    Java数据库学习之模糊查询(like ): 第一种方式:直接在SQL语句中进行拼接,此时需要注意的是parm在SQL语句中需要用单引号拼接起来,注意前后单引号之间不能空格 String sql = ...

  2. .NET平台开源项目速览(7)关于NoSQL数据库LiteDB的分页查询解决过程

    在文章:这些.NET开源项目你知道吗?让.NET开源来得更加猛烈些吧!(第二辑) 与 .NET平台开源项目速览(3)小巧轻量级NoSQL文件数据库LiteDB中,介绍了LiteDB的基本使用情况以及部 ...

  3. java数据库学习路线和必学知识点!

    java数据库必学知识点! 分享一下数据库的学习路线和必学的知识点! 掌握mysql,Oracle在各个平台上的安装及使用 Mysql数据库基础 mysql概述.优点.运行原理及内存结构 mysql数 ...

  4. 基于Mysql数据库的SSM分页查询

    前言: Hello,本Y又来了,"分页"在我们使用软件的过程中是一个很常见的场景,比如博客园对于每个博主的博客都进行了分页展示.可以简单清晰的展示数据,防止一下子将过多的数据展现给 ...

  5. 菜鸟学Java(十)——分页查询

    今天继续跟大家说说一些非常基础的东西,这次我们说说分页查询.说到分页,可能很多人都听说过什么真分页.假分页的.简单解释一下,拿第二页,每页20条为例:真分:数据库里取 的就是21-40条:假分:数据库 ...

  6. mysql数据库封装和 分页查询

    1 之前我们学到了php连接mysql数据库的增删改查,中间要多次调用数据库, 而且以后用到的表比较多,上传中如果需要改数据的话会非常麻烦,但是如果 我们把数据库封装,到时就可以很轻松的把改掉一些数据 ...

  7. JAVA入门[10]-mybatis分页查询

    1.添加分页插件 在mybatis-generator-config.xml添加plugin节点: <plugin type="org.mybatis.generator.plugin ...

  8. MySQL数据库封装和分页查询

    1.数据库封装 <?php //我用的数据库名是housedb class DBDA {public $host="localhost";public $uid=" ...

  9. Java数据库学习之SQL语句动态拼接

    public class UserDaoImpl implements UserDao { @Override public List<User> getUserByPage(PageIn ...

随机推荐

  1. Devexpress常见问题

    1.DevExpress控件组中的GridControl控件不能使横向滚动条有效. 现象:控件中的好多列都挤在一起,列宽都变的很小,根本无法正常浏览控件单元格中的内容. 解决:gridView1.Op ...

  2. SpringBoot-MongoDB 索引冲突分析及解决

    一.背景 spring-data-mongo 实现了基于 MongoDB 的 ORM-Mapping 能力, 通过一些简单的注解.Query封装以及工具类,就可以通过对象操作来实现集合.文档的增删改查 ...

  3. MySQL性能基准测试对比:5.7 VS 8.0

    本文由云+社区发表 作者:数据库 版权声明:本文由腾讯云数据库产品团队整理,页面原始内容来自于severalnines英文官网,若转载请注明出处.翻译目的在于传递更多全球最新数据库领域相关信息,并不意 ...

  4. python类属性用法总结

    属性的定义:python中的属性其实是普通方法的衍生. 操作类属性有三种方法: 1.使用@property装饰器操作类属性. 2.使用类或实例直接操作类属性(例如:obj.name,obj.age=1 ...

  5. tomcat部署项目后,war包是否可刪?war包存在必要性!

    在tomcat中webapps目錄上傳war包后,  对war解压时候. war不能在tomcat运行时删除,否则会删除自动解压的工程. 你可以停止tomcat后删除war. 当你重新部署的时候,如果 ...

  6. java爬虫系列第三讲-获取页面中绝对路径的各种方法

    在使用webmgiac的过程中,很多时候我们需要抓取连接的绝对路径,总结了几种方法,示例代码放在最后. 以和讯网的一个页面为例: xpath方式获取 log.info("{}", ...

  7. h5页面 video暂停播放 视频控件 以及当前页面只有一个可以播放效果

    <!DOCTYPE html> <html> <head> <meta name="viewport" content="wid ...

  8. <%@ Register TagPrefix="uc1" TagName="user" Src="../Control/user.ascx" %>什么意思?

    TagPrefix定义控件位置的命名空间.有了命名空间制约,就可以在同一个网页里使用不同功能的同名控件. TagName指向所使用控件的名字.在同一个命名空间里的控件名是唯一的.控件名一般都表明控件的 ...

  9. SQL ----post漏洞测试注入

    使用工具sqlmap 输入账号密码进行bp截断,获取文本保存在sqlmap下面2.txt 爆数据库 爆表爆表 爆数据 最后把数据密码md5解析

  10. jquery 同步加载

    jquery在前端展示时,如果需要从服务器获取信息然后在更新,需要设置同步加载. async属性设置为:false即可. $.ajax({ url : 'test.php', type : 'post ...