创建存储过程
CREATE PROCEDURE GetDataByPage ( --创建一个分页读取过程 @SqlStr varchar(8000), --SQL语句 @PageSize int, --每页记录数 @CurrentPage int --当前页数 ) AS DECLARE @FirstRec int, @LastRec int, @dt varchar(10) --页起始行,页结束行,生成临时表的随机数 BEGIN SELECT @FirstRec = (@CurrentPage - 1) * @PageSize --计算页起始行 SELECT @LastRec = (@CurrentPage * @PageSize + 1) --计算页结束行 SELECT @dt= substring(convert(varchar,rand()),3,10) --一个字符型的随机数 --将搜索结果放入临时表中,表名随机生成,在' FROM '前插入'INTO '+随机临时表名 SELECT @SqlStr = stuff(@SqlStr, charindex(' FROM ',upper(@SqlStr)), 6 ,' INTO tempdb..Paging'+@dt+' FROM ') EXECUTE (@SqlStr) --为临时表增加id号 SELECT @SqlStr = 'ALTER TABLE tempdb..Paging'+@dt+' ADD TEMPDB_ID numeric(10) IDENTITY PRIMARY KEY' EXECUTE (@SqlStr) --计算临时表中的记录数 --SELECT @SqlStr = 'SELECT Count(*) From tempdb..Paging'+@dt --EXECUTE (@SqlStr) --选取记录号在起始行和结束行中间的记录 SELECT @SqlStr = 'SELECT * FROM tempdb..Paging' + @dt + ' WHERE TEMPDB_ID > ' + convert(varchar,@FirstRec) + ' and TEMPDB_ID < '+convert(varchar,@LastRec) EXECUTE (@SqlStr) --删除临时表 SELECT @SqlStr = 'DROP TABLE tempdb..Paging'+@dt EXECUTE (@SqlStr) END
直接在命令行执行即可。
Java中使用JDBC进行调用,如下代码是在Spring中使用JdbcTemplate获取Connection,并以PageRequest传递分页参数。
@Autowired private JdbcTemplate jdbcTemplate; public Page<User> findAll(PageRequest pageRequest){ Page<User> page = null; try { Connection conn = jdbcTemplate.getDataSource().getConnection(); int start = pageRequest.getPageNumber(); int pageSize = pageRequest.getPageSize(); String sql = "select * from RE_USER t"; // java调用存储过程代码,GetDataByPage是存储过程名称,有三个参数, CallableStatement cs = conn.prepareCall("{call GetDataByPage(?,?,?)}", ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE); cs.setString(1, sql.toString());// 查询的sql语句 cs.setInt(2, pageSize); // 每页显示的数量 cs.setInt(3, start); // 页数 ResultSet rs = cs.executeQuery();// 获得存储过程返回的结果集 List<User> list = new ArrayList<User>(); while (rs.next()) { User obj = new User(); obj.setId(rs.getString("ID")); obj.setUserName(rs.getString("USER_NAME")); obj.setUserPass(rs.getString("USER_PASS")); list.add(obj); } sql = "select count(*) from RE_USER t"; int maxValue = jdbcTemplate.queryForInt(sql); page = new PageImpl<User>(list, pageRequest, maxValue); } catch (Exception e) { } return page; }
Java小强
未曾清贫难成人,不经打击老天真。
自古英雄出炼狱,从来富贵入凡尘。
发表评论: