java分页查询sql语句_Java数据库学习之分页查询

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

思路:

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

start = (pages-1)*rows;

pages : 具体要查询那一页

rows :   每页查询多少行

pram rows 查询多少行

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

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

DEMO1  分页查询的主方法

public List selectByPage(int startpage, int rows) {

sql = "select * from tb_user limit ?,?";

conn = DBUtil.getconn();

List 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 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 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;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值