Java小强个人技术博客站点    手机版
当前位置: 首页 >> DB >> 使用存储过程对SyBase数据库进行分页查询

使用存储过程对SyBase数据库进行分页查询

111260 DB | 2015-6-28

创建存储过程

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

推荐您阅读更多有关于“ 存储过程 分页 SyBase ”的文章

上一篇:使用SAX解析XML 下一篇:JdbcTemplate使用方法总结

猜你喜欢

发表评论: