您的位置:首页 > 数据库 > MySQL

JDBC调用mysql存储过程实现分页效果

2017-03-16 20:05 288 查看
数据库测试表:



需求:通过输入pageNow和pageSize返回数据库对应的数据记录

drop procedure if exists fenye;

delimter $
create procedure fenye(in pageNow int,in pageSize int)
begin
declare rowCount int default 0;  -- 总记录数
declare pageCount int default 0; -- 总页数
declare pageIndex int default 0; -- 分页的起始下标
select count(*) into rowCount from goods;

-- 计算总的页数
if rowCount%pageSize = 0 then
set pageCount:= rowCount/pageSize;
else
set pageCount:= rowCount/pageSize+1;
end if;

if pageNow<=pageCount and pageNow>0 then
set pageIndex:= (pageNow-1)*pageSize;
select *from goods limit pageIndex,pageSize;
end if;
end $


测试效果:



分析:获取第1页,pageSize=3的数据记录



分析:获取第2页,pageSize=1的数据记录

JDBC测试代码:

package com.zhiwei.database;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

/**
* JDBC调用存储过程,返回的结果为select语句
*/
public class JDBCProcedure {

public static void main(String[] args) throws Exception {

Class.forName("com.mysql.jdbc.Driver");
Connection connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/test", "squirrel", "xiaoyang");

//存储过程调用:{call fenye(1,3)}  参数动态设置,类似PreparedStatement
CallableStatement cs = connection.prepareCall("{call fenye(?,?)}");
cs.setInt(1,1);
cs.setInt(2, 2);

ResultSet rs = cs.executeQuery();
List<Good> goods = new ArrayList<Good>();

while(rs.next()){
Good good = new Good();
good.setGoodId(rs.getInt(1));
good.setGoodName(rs.getString(2));
good.setGoodPrice(rs.getFloat(3));
good.setGoodNum(rs.getInt(4));
goods.add(good);
}
System.out.println(goods);

rs.close();
cs.close();
connection.close();
}
}


效果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息