JDBC存储过程的通用分页

来源:互联网 发布:nginx单机多域名 编辑:程序博客网 时间:2024/05/29 13:33
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 descprivate 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();}}}

原创粉丝点击