JDBC存储过程的通用分页

package com.softeem.jdbcpro;

import java.util.List;

/**
 * DTO
 * 通用分页工具类
 * @author mrchai
 */
public class PageUtils {

	private int currentPage;	//当前页
	private int pageSize;		//每页大小
	private String tableName;	//表名称
	private String selections;	//查询列	
	private String condition;	//查询条件
	private String sortColumn;	//排序列
	private String sortType;	//排序类型 asc desc
	
	private int totalNum;		//总记录数
	private int totalPage;		//总页码数
	private List<Object[]> datas;	//当前页数据
	
	public int getCurrentPage() {
		return currentPage;
	}
	public void setCurrentPage(int currentPage) {
		this.currentPage = currentPage;
	}
	public int getPageSize() {
		return pageSize;
	}
	public void setPageSize(int pageSize) {
		this.pageSize = pageSize;
	}
	public String getTableName() {
		return tableName;
	}
	public void setTableName(String tableName) {
		this.tableName = tableName;
	}
	public String getSelections() {
		return selections;
	}
	public void setSelections(String selections) {
		this.selections = selections;
	}
	public String getCondition() {
		return condition;
	}
	public void setCondition(String condition) {
		this.condition = condition;
	}
	public String getSortColumn() {
		return sortColumn;
	}
	public void setSortColumn(String sortColumn) {
		this.sortColumn = sortColumn;
	}
	public String getSortType() {
		return sortType;
	}
	public void setSortType(String sortType) {
		this.sortType = sortType;
	}
	public int getTotalNum() {
		return totalNum;
	}
	public void setTotalNum(int totalNum) {
		this.totalNum = totalNum;
	}
	public int getTotalPage() {
		return totalPage;
	}
	public void setTotalPage(int totalPage) {
		this.totalPage = totalPage;
	}
	public List<Object[]> getDatas() {
		return datas;
	}
	public void setDatas(List<Object[]> datas) {
		this.datas = datas;
	}
	
}

package com.softeem.jdbcpro;

import java.sql.CallableStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import com.softeem.utils.BaseConn;



public class ProcedureDemo extends BaseConn{ //继承已经封装的JDBC工具(获取一个Connection对象)

	public void proc01() throws SQLException{
		//根据存储过程调用命令获取预处理对象
		CallableStatement cs = getConn().prepareCall("{call query_top10()}");
		ResultSet rs = cs.executeQuery();
		while(rs.next()){
			int num = rs.getInt("num");
			String name = rs.getString("name");
			System.out.println(num+"---"+name);
		}
	}
	
	public PageUtils procPaging(PageUtils pu) throws SQLException{
		CallableStatement cs = getConn().prepareCall("{call sp_paging(?,?,?,?,?,?,?,?,?)}");
		cs.setInt(1, pu.getCurrentPage());
		cs.setInt(2, pu.getPageSize());
		cs.setString(3, pu.getTableName());
		cs.setString(4, pu.getSelections());
		cs.setString(5, pu.getCondition());
		cs.setString(6, pu.getSortColumn());
		cs.setString(7, pu.getSortType());
		
		//注册输出参数
		cs.registerOutParameter(8, java.sql.Types.INTEGER);
		cs.registerOutParameter(9, java.sql.Types.INTEGER);
		//执行存储过程
		cs.execute();
		//获取制定位置的输出参数值
		int totalNum = cs.getInt(8);
		int totalPage = cs.getInt(9);
		pu.setTotalNum(totalNum);
		pu.setTotalPage(totalPage);
		
		//声明用于存储查询结果的集合
		List<Object[]> datas = new ArrayList<>();
		
		//获取查询的结果集
		ResultSet rs = cs.getResultSet();
		ResultSetMetaData rsmd = rs.getMetaData();
		int count = rsmd.getColumnCount();
		while(rs.next()){
			Object[] obj = new Object[count];
			for(int i = 0;i<count;i++){
				//获取标签名称(可能是列名称)
				String label = rsmd.getColumnLabel(i+1);
				Object c = rs.getObject(label);
				obj[i] = c;
			}
			datas.add(obj);
		}
		//将查询结果设置到PageUtils中
		pu.setDatas(datas);
		return pu;
	}
	
	public static void main(String[] args) throws SQLException { //测试任意数据表
		PageUtils pu = new PageUtils();
		pu.setCurrentPage(1);
		pu.setPageSize(100);
		pu.setTableName("product");
//		pu.setSelections("pname");
		pu.setCondition("id");
		pu.setSortColumn("total");
		pu.setSortType("ASC");
		
		pu = new ProcedureDemo().procPaging(pu);
		for (Object[] obj : pu.getDatas()) {//打印
			for (int i = 0; i < obj.length; i++) {
				System.out.print(obj[i]+"  ");
			}
			System.out.println();
		}
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值