手机端小强原创文章,java小强个人博客站点
当前位置: 首页 >> DB >> 使用存储过程对SyBase数据库进行分页查询

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

27510 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使用方法总结

猜你喜欢

发表评论:

个人资料
blogger

java小强
没有思考,人生的路会越走越难!

搜索
分类
最新微语
  • 又弄完一个项目,累成狗,但是感觉又进步不少,除了很多坑已经踩过,做起来也是轻车熟路。同时也认识到,程序不在于你多牛逼,而是在乎你的细节把控度,而细节的关注,是一个优秀程序员必须要注意的。另外,要相信自己,勇敢向前,没人生下来就是成功的,而且,成功的路,比成功本身更重要。

    2017-06-30 09:46

  • 今日北京再次沙尘暴来袭,吃了几年细粮,终于能来口粗粮了,不过大早上看见这场景,还是吓我一跳,不过随后就平静了,毕竟是老朋友了。进公司又发现一股烤糊的味道,真是祸不单行啊,例外都是污染。发了两个口罩,开启保护模式。

    2017-05-04 10:16

  • 今天同学问我,最近还在写代码吗?我想了想,这个问题怎么回答呢,我好像确实很长时间,虽然写了一些,但是主要内容已经不是写代码了。然后再想想,自己也7年多了,这么多年了,我收获了什么,我的目标到底是什么。眼看就奔三了,人生啊,开启感叹模式。

    2017-03-30 22:52

  • 也许大家都已经注意到了,今年的房价,好多地方都是翻了一番,跟着就是,各地房东开始变相涨租。今年之所以搬走,就是为此,这两天同学也是如此。很多房东只认钱,别谈感情,伤钱。而对于这个城市来说,你怎么定位自己,你真把自己当成她的一份子?你来此为何?将来何去何从?自己掂量清楚。

    2016-12-05 10:03

  • 为什么一直不写了呢?因为当爸爸了,没空了。今年的冬天,有些寒冷,除了这寒冬带来的不适,更有因乐视公司遇到危机,而带来的同事别离。送别同事,看着空旷的工位,心中有些悲凉。临近年关,此时此刻,该怎么做,似乎不再是脑子一热那么简单了。

    2016-11-24 11:28

  • 更多»

最新文章
热门文章
随机文章