分页查询  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. Python 闭包小记

    闭包就是能够读取其他函数内部变量的函数.例如在javascript中,只有函数内部的子函数才能读取局部变量,所以闭包可以理解成“定义在一个函数内部的函数“.在本质上,闭包是将函数内部和函数外部连接起来 ...

  2. Tomcat 对 HTTP 协议的实现(上)

    协议,直白的说就是存在一堆字节,按照协议指定的规则解析就能得出这堆字节的意义.HTTP 解析分为两个部分:解析请求头和请求体. 请求头解析的难点在于它没有固定长度的头部,也不像其他协议那样提供数据包长 ...

  3. JDBC事务控制

    概念 事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit).事务通常由高级数据库操纵语言或编程语言(如SQL,C++或Java)书写的用户程序的执行所引起,并 ...

  4. 网站集群架构(LVS负载均衡、Nginx代理缓存、Nginx动静分离、Rsync+Inotify全网备份、Zabbix自动注册全网监控)--技术流ken

    前言 最近做了一个不大不小的项目,现就删繁就简单独拿出来web集群这一块写一篇博客.数据库集群请参考<MySQL集群架构篇:MHA+MySQL-PROXY+LVS实现MySQL集群架构高可用/高 ...

  5. MySQL 笔记整理(19) --为什么我只查一行的语句,也执行这么慢?

    笔记记录自林晓斌(丁奇)老师的<MySQL实战45讲> (本篇内图片均来自丁奇老师的讲解,如有侵权,请联系我删除) 19) --为什么我只查一行的语句,也执行这么慢? 需要说明一下,如果M ...

  6. java_IO流

    IO流概述及分类 Reader  InputStream  OutputStream  Writer都是Object的直接子类 字节流: 字节输入流 InputStream(抽象类) |---File ...

  7. [总结]CSS/CSS3常用样式与web移动端资源

    CSS/CSS3常用样式与知识点 IE条件注释 条件注释简介 IE中的条件注释(Conditional comments)对IE的版本和IE非IE有优秀的区分能力,是WEB设计中常用的hack方法.条 ...

  8. 持续集成之 Spring Boot 实战篇

    本文作者: CODING 用户 - 何健 这次实战篇,我们借助「CODING 持续集成」,实现一个简单的 Spring Boot 项目从编码到最后部署的完整过程.本教程还有 B 站视频版,帮助读者更好 ...

  9. android使用百度地图最新sdk5.0后后代码混淆时,地图无法显示闪退问题

    描述:刚开始遇到这个问题我一步一步去排除,最后发现在初始化地图的时候,代码混淆就有问题了, 问题描述:当跳显示地图的页面APP闪退, 解决对比: 1:对于老版本百度sdk:代码混淆时语句: -libr ...

  10. EOS之hello智能合约解析

    传送门: 柏链项目学院   EOS的智能合约与以太坊区别很大, EOS 的智能合约基于 WebAssembly(WASM) 技术执行用户生成的应用程序和代码.WASM是一项新兴的网络标准,得到了谷歌, ...